a = [0]*4
a[0]= 1
print(a)
输出是 [1,0,0,0] 而根据 Strange behavior of lists in 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
对象没有维度。
关于python - 引用单维列表的python异常行为中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59495840/