在最新的Python(3.2):python的正常行爲?
>>> l = [{}]*2
>>> l[1]['key'] = 'value'
>>> l
[{'key': 'value'}, {'key': 'value'}]
我預計L達到[{}, {'key': 'value'}]
此操作之後。這是正常行爲還是錯誤?
在最新的Python(3.2):python的正常行爲?
>>> l = [{}]*2
>>> l[1]['key'] = 'value'
>>> l
[{'key': 'value'}, {'key': 'value'}]
我預計L達到[{}, {'key': 'value'}]
此操作之後。這是正常行爲還是錯誤?
正常。請嘗試使用l = [{} for x in range(2)]
。
[{}]*2
實際上並不生成2個不同的字典 - 它使用兩個引用到同一字典的列表。因此,更新該字典會使列表中的兩個項目都顯示更改,因爲兩個項目實際上都是相同的字典,只是引用了兩次。
[{}]*2
不會產生帶有兩個字典的列表,它將導致帶有相同字典兩次的列表。改爲使用[{} for x in range(2)]
。
此代碼產生相同的結果在上Codepad當V 2.5.1
import sys
print sys.version_info
l = [{}]*2
l[1]['key'] = 'value'
print l
你做什麼意味着'L [0]是1 [1]' –
經過近20年的發展,答案到「這是蟒蛇的正常行爲嗎?」幾乎總是「是」。 –
爲了闡明Jochen的評論,如果你輸入'l [0]是l [1]',你將會得到'True',這意味着它們是同一個對象。 –