[英]Why does assiging a list element to a variable work in a different manner here?
我有這段代碼:
lst = [[1,1], [2,1],[3,1]]
n = len(lst)
head = lst[n - 1]
head[0] += 1
lst.append(head)
del lst[0]
print(lst)
我期待這段代碼打印: [[2,1], [3,1], [4,1]]
但它正在打印: [[2, 1], [4, 1], [4, 1]].
我不明白為什么。 請幫我。
當您編寫head = lst[n - 1]
,會將 head 通過引用設置為 lst 的最后一個元素。 這意味着具有值[3,1]
的對由兩個變量共享。 如果您不想更改原始列表中的對,請確保頭部復制數據。
head = lst[n - 1].copy()
滿足您需求的快速解決方案是
inc_lst = [ [ x[0]+1 , x[1] ] for x in lst]
希望它會有所幫助
當你使用
head = lst[n - 1]
當您執行時,您將參考 [3,1] 作為頭部
head[0] += 1
你把 [[1,1], [2,1], [3,1]] 改為 [[1,1],[2,1], [4,1]]
當你追加時,lst 得到了另一個 head 副本。
因此,在 del lst[0] 之后,您得到了結果 [[2,1], [4,1], [4,1]]
lst = [[1,1], [2,1],[3,1]]
n = len(lst)
- n
將等於 3head = lst[n - 1]
=> head = lst[2]
=> head = [3, 1]
head[0] += 1
改變 head, head = [4, 1]
lst.append(head)
,記住lst = [[1, 1], [2, 1], [4, 1]]
和head = [4, 1]
=> [[1, 1], [2, 1 ], [4, 1], [4, 1]]del lst[0]
=> [[2, 1], [4, 1], [4, 1]] 無論如何,當 head 為[3, 1]
您更改 head 並自動更改lst[n - 1]
另外,請嘗試使用http://www.pythontutor.com/visualize.html
如果需要逐步了解代碼的工作原理,這是一個非常有用的工具。
這實際上是編程初學者(比如我自己)中非常普遍的問題。 其他問題已經回答了這個問題,但我只想提一下,這是“值語義與引用語義”的一個案例。 為了避免將來出現此類錯誤,簡要閱讀此主題可能會很有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.