簡體   English   中英

列表到元組-修改列表會反映在元組中,但清空列表不會在元組中更改

[英]List into a tuple - modifying the list reflects in tuple but emptying the list does not change in tuple

為什么在下面的示例中,當我設置names = [] ,元組t不會改變,但是當我向names列表中添加新值時,卻反映了改變?

看起來tuple最初是在引用該列表,因此任何更改都反映在元組對象中,但是將其清空似乎就像創建了一個新副本。

>>> names = ['Mark','Hary']
>>> t = (names,'Lauri')
>>> t
(['Mark', 'Hary'], 'Lauri')
>>> names.append('Donna')
>>> names
['Mark', 'Hary', 'Donna']
>>> t
(['Mark', 'Hary', 'Donna'], 'Lauri')
>>> names = []
>>> names
[]
>>> t
(['Mark', 'Hary', 'Donna'], 'Lauri')

names.append('Donna')將影響元組,因為元組是抱着同樣的參考列表對象 names呢,和你在的地方(變異它list.append )。

names = []是不會改變引用的賦值語句,它將names重新綁定到新對象(在這種情況下為空列表)。 這樣的重新綁定不會影響元組內部已經存在的引用。

您可以就地刪除(即,修改由names 引用的列表對象)並反映出該更改。 這可以通過多種方式完成,您可以使用names.clear()del names[:]甚至names[:] = []

del names[:]

執行此操作后, t內的引用具有以下更改:

print(t)
([], 'Lauri')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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