两者之间的区别有解释器吗?
aL, bL = [[], []]
xL, yL = [[]] * 2
表面上,它们应该是相同的。
[[], []] == [[]] * 2
True
但是他们的行为有所不同。
aL.append("a")
xL.append("x")
bL
[]
yL
['x']
>>> [[]] * 2 == [[], []] # True
>>> a1, b1 = [[], []]
>>> id(a1) # 4425627680
>>> id(b1) # 4425627760
>>> a2, b2 = [[]] * 2
>>> id(a2) # 4424875616
>>> id(b2) # 4424875616
[当您使用*
表达式生成列表列表时,Python正在复制[[]]
的内部对象,并复制其引用。因此,进行[[]] * 2
时,将得到一个列表列表,其中内部列表中的all是同一对象。如果您仍然感到困惑,建议您检查一下此post。
现在为什么[[]] * 2 == [[], []]
为True,这很容易观察:
>>> bool([[], []]) # True
>>> bool([[]] * 2) # True
>>> bool([]) # False
内部包含任何内容的列表的总值为True
,因此您正在执行的True == True
当然是True
。