簡體   English   中英

為什么將列表元素分配給變量在這里以不同的方式工作?

[英]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]]

  1. lst = [[1,1], [2,1],[3,1]]
  2. n = len(lst) - n將等於 3
  3. head = lst[n - 1] => head = lst[2] => head = [3, 1]
  4. head[0] += 1改變 head, head = [4, 1]
  5. lst.append(head) ,記住lst = [[1, 1], [2, 1], [4, 1]]head = [4, 1] => [[1, 1], [2, 1 ], [4, 1], [4, 1]]
  6. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM