|
|
发表于 2026-1-24 19:26:03
|
显示全部楼层
序列的 加法 和 乘法
[1, 2, 3] + [4, 5, 6]
[1, 2, 3, 4, 5, 6]
(1, 2, 3) + (4, 5, 6)
(1, 2, 3, 4, 5, 6)
"123" + "456"
'123456'
[1, 2, 3] * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
(1, 2, 3) * 3
(1, 2, 3, 1, 2, 3, 1, 2, 3)
"123" * 3
'123123123'
增量赋值
s = [1, 2, 3]
id(s)
1817383726976
s *= 2
s
[1, 2, 3, 1, 2, 3]
id(s)
1817383726976 ------可变序列做增量赋值时,唯一标识不变(因为本身可变,不需要每次改变时创造一个新id)
t = (1, 2, 3)
id(t)
1817426862672
t *= 2
t
(1, 2, 3, 1, 2, 3)
id(t)
1817426889984 ------不可变序列做增量赋值时,唯一标识每次都会改变(因为不可变序列本身不能改变,所以必须创造一个和之前同变量名的新对象,这个新对象有不同的唯一标识)
同一性运算符 is / is not
x = "FishC"
y = "FishC"
x is y
True ------------ 对象为 不可变序列,"FishC"的id 是唯一的,变量x 和 y 都是对同一个id 的引用
x = [1, 2, 3]
y = [1, 2, 3]
x is y
False --------- 对象为可变序列,[1, 2, 3]的id 不是唯一的,变量 x 和 y 引用不同的列表id
in / not in
"鱼" in "鱼C"
True
"Fish" in "FishC"
True
"C" not in "FishC"
False
del 删除
x = "FishC"
y = [1, 2, 3]
del x, y
x = [1, 2, 3, 4, 5]
del x[1:4]
x
[1, 5]
y = [1, 2, 3, 4, 5]
y[1:4] = [] ------- 用切片的方法实现
y
[1, 5]
补充说明,切片对序列的影响:
不可变序列:
切片得到的新对象与原对象无关,原对象不可被切片结果直接修改(需要重新赋值)。
例:t = (1,2,3,4); t[1:3] = (9,9) # 会报错,因为元组不可变,切片赋值不允许。
可变序列:
切片也不会直接修改原对象,仍然返回一个新对象。但可以通过切片赋值来就地修改原对象的内容。
例:lst = [0,1,2,3,4]; lst[1:3] = ['a','b']; 结果 lst 变为 [0, 'a', 'b', 3, 4]。
注意:切片赋值的长度可以与原切片长度不同,这会改变原序列的长度(适用于 list、bytearray 等可变序列)。
x = [1, 2, 3, 4, 5]
del x[::2] ------ 按照指定步幅删除
x
[2, 4]
y = [1, 2, 3, 4, 5]
y[::2] = [] ----- 切片无法进行上面del 同样的操作
Traceback (most recent call last):
  File "<pyshell#59>", line 1, in <module>
    y[::2] = []
ValueError: attempt to assign sequence of size 0 to extended slice of size 3
---------------------
同样是清空列表里面的元素,clear() 和 del预算符 的对比:
x = [1, 2, 3, 4, 5]
x.clear()
x
[]
y = [1, 2, 3, 4, 5]
del y[:]
y
[]
 
|
|