类似对象的列表

时间:2014-01-23 13:20:12

标签: python list

我需要创建None个对象列表并使用此表单

a = [None] *2
a[0] = 0

a的值是:

[1, None]
然而,当我尝试同样的事情时:

a = [{'elem' : 0}] * 2

之后

a[1]['elem'] = 0

a的值变为:

[{'elem': 1}, {'elem': 1}]

任何人都可以帮我理解这背后的机制吗?

2 个答案:

答案 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