[英]Python list of list initialize
我知道
[[]] * 10
將給出 10 個相同空的引用,並且
[[] for i in range(10)]
將給出 10 個空列表。 但在這個例子中:
def get_list(thing):
return [thing for i in range(10)]
a = get_list([])
a[0].append(1)
print(a)
為什么結果又是
[[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]
編輯:
與問題List of lists changes床意外地反映在子列表中不同,我知道 Python 不會在[x]*10
進行復制。
但是為什么[]
在[[] for i in range(10)]
是特殊的? 我認為這是不一致的。 Python 不是創建一個空列表[]
然后傳遞給[ ___ for i in range(10)]
,而是從字面上理解 "[]" 並為每個i
執行 "[]" 。
那是因為thing
是同一個列表。
在[[] for i in range(10)]
每次都會生成一個新列表。
在[thing for i in range(10)]
它始終是名為thing
的列表。
我現在明白為什么我錯了。 我回答我的問題:
我誤解了python中的列表理解
[ ___ for i in range(10)]
這不像將擴充傳遞給函數。 列表理解每次在其循環中按字面意思執行您的表達式。
表達式[]
in [ [] for i in range(10)]
每次都會執行,因此您會為每個條目獲得一個新的空列表。
[thing for i in range(10)]
。 expression thing
被執行,結果總是一樣的:對一個空列表的引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.