我需要创建None
个对象列表并使用此表单
a = [None] *2
a[0] = 0
a
的值是:
[1, None]
然而,当我尝试同样的事情时:
a = [{'elem' : 0}] * 2
之后
a[1]['elem'] = 0
a
的值变为:
[{'elem': 1}, {'elem': 1}]
任何人都可以帮我理解这背后的机制吗?
答案 0 :(得分:1)
a = [{'elem' : 0}] * 2
'a'包含对同一字典的两个引用。第一种情况的等价物是:
a[0] = {'elem' : 1}
答案 1 :(得分:0)
通过使用乘法,您创建了对同一字典的引用列表
In [11]: a = [{'elem' : 0}] * 2
In [14]: for elem in a:
print id(elem)
....:
142676420
142676420
创建2个独立词典的列表
In [15]: a = [{'elem' : 0} for _ in range(2)]
In [16]: for elem in a:
print id(elem)
....:
142695116
142695932