我已经使用Python多年了,但只是注意到一个非常令人困惑的事情.
a=[[]]*3
a[0].append(3)
Run Code Online (Sandbox Code Playgroud)
和
a=[[] for i in range(3)]
a[0].append(3)
Run Code Online (Sandbox Code Playgroud)
即使类型(列表)相同,也不会产生相同的效果.第一个产量a=[[3], [3], [3]],第二个产量a=[[3],[],[]](如预期的那样).
有人有解释吗?
[[]]*3创建一个列表,其中包含对同一列表对象的三个引用:
>>> lst = [[]]*3
>>> # The object ids of the lists in 'lst' are the same
>>> id(lst[0])
25130048
>>> id(lst[1])
25130048
>>> id(lst[2])
25130048
>>>
Run Code Online (Sandbox Code Playgroud)
[[] for i in range(3)]创建一个包含三个唯一列表对象的列表:
>>> lst = [[] for i in range(3)]
>>> # The object ids of the lists in 'lst' are different
>>> id(lst[0])
25131768
>>> id(lst[1])
25130008
>>> id(lst[2])
25116064
>>>
Run Code Online (Sandbox Code Playgroud)