肯定有,没有,我长那么帅干嘛!---- 鸣人鸣言
print([[]]*3) # [[],[],[]]
print([[]]*3 == [[],[],[]]) # True
由代码可以看出,二者的值是相等的。但是我们知道值相等并不代表二者等价。下面两段代码比较出了二者的不同。
代码1:
lists1 = [[],[],[]]
print(lists1) # [[],[],[]]
lists1[0].append(3)
print(lists1) # [[3],[],[]]
代码2
lists2 = [[]]*3
print(lists2) # [[],[],[]]
lists2[0].append(3)
print(lists2) # [[3],[3],[3]]
二者的不同的原因在于:
[[]]
是一个包含了一个空列表的单元素列表,所以[[]] * 3
结果中的三个元素都是对这一个空列表的引用。 修改lists
中的任何一个元素实际上都是对这一个空列表的修改。
也就是说:[[]]* 3
结果中的三个元素都引用同一个内存地址,这个内存地址上的值(value)变了,大家跟着都变。而[[],[],[]]
中的每个元素各自引用一个内存地址,其中一个值给变并不影响另外两个。
print([[]]*3 is [[],[],[]]) # False
提示:is
是比较对象的id,而==
比较对象的值。
网友评论