2011-08-28 29 views
3

在最新的Python(3.2):python的正常行爲?

>>> l = [{}]*2 
>>> l[1]['key'] = 'value' 
>>> l 
[{'key': 'value'}, {'key': 'value'}] 

我預計L達到[{}, {'key': 'value'}]此操作之後。這是正常行爲還是錯誤?

+0

你做什麼意味着'L [0]是1 [1]' –

+4

經過近20年的發展,答案到「這是蟒蛇的正常行爲嗎?」幾乎總是「是」。 –

+0

爲了闡明Jochen的評論,如果你輸入'l [0]是l [1]',你將會得到'True',這意味着它們是同一個對象。 –

回答

12

正常。請嘗試使用l = [{} for x in range(2)]

[{}]*2實際上並不生成2個不同的字典 - 它使用兩個引用到同一字典的列表。因此,更新該字典會使列表中的兩個項目都顯示更改,因爲兩個項目實際上都是相同的字典,只是引用了兩次。

3

[{}]*2不會產生帶有兩個字典的列表,它將導致帶有相同字典兩次的列表。改爲使用[{} for x in range(2)]

0

此代碼產生相同的結果在上Codepad當V 2.5.1

import sys 

print sys.version_info 

l = [{}]*2 
l[1]['key'] = 'value' 
print l