简单 python 问题:两个相等的列表表现不同
Simple python question: two equal lists acting differently
我在 python 中使用乘法创建了一个列表,并且更明确地使用了第二个。我检查它们是否相等,然后尝试更改每个中的相同元素。这种改变对每个人都有不同的作用。代码:
list1 = [[0]*2]*2
list2 = [[0, 0], [0, 0]]
print(list1 == list2)
list1[0][0] = 3
list2[0][0] = 3
print(list1)
print(list2)
打印出来:
True
[[3, 0], [3, 0]]
[[3, 0], [0, 0]]
这是怎么回事?为什么多重启动列表的行为不同?
我相信会发生这种情况,因为在乘以一个列表时,您只是在引用现有对象,因此您对原始对象所做的任何操作都会对所有引用进行。
您想这样做:
list1 = [[0] * 2 for x in range(2)]
我在 python 中使用乘法创建了一个列表,并且更明确地使用了第二个。我检查它们是否相等,然后尝试更改每个中的相同元素。这种改变对每个人都有不同的作用。代码:
list1 = [[0]*2]*2
list2 = [[0, 0], [0, 0]]
print(list1 == list2)
list1[0][0] = 3
list2[0][0] = 3
print(list1)
print(list2)
打印出来:
True
[[3, 0], [3, 0]]
[[3, 0], [0, 0]]
这是怎么回事?为什么多重启动列表的行为不同?
我相信会发生这种情况,因为在乘以一个列表时,您只是在引用现有对象,因此您对原始对象所做的任何操作都会对所有引用进行。
您想这样做:
list1 = [[0] * 2 for x in range(2)]