a = [0]*4
a[0]= 1
print(a)
输出是 [1,0,0,0],而根据 python 中列表的奇怪行为中解释的列表行为,它应该是 [1,1,1,1],其中说 * 创建对对象的引用而不是值的副本。 请解释一下
是的,使用重复运算符*
创建对列表中对象的多个引用。但是,a[0] = 1
不修改这些对象,它也会修改列表。
如果可以修改列表中的对象(在这种情况下,不能修改,因为int
对象是不可变的(,然后确实修改了这些对象,则会看到相同的行为。
请注意,即使您将a[0] = <something>
与可变对象一起使用,它也不会以这种方式运行:
>>> x = [[]]*3
>>> x
[[], [], []]
>>> x[0] = [1] # modify the list
>>> x
[[1], [], []]
您必须实际修改列表中的对象:
>>> x = [[]]*3
>>> x
[[], [], []]
>>> x[0].append(1) # modify the in the list
>>> x
[[1], [1], [1]]
您缺少的根本区别在于修改列表本身与列表中对象之间的区别。
另请注意,list
对象没有维度。