簡體   English   中英

Python remove 方法從兩個列表中刪除元素

[英]Python remove method removes element from both lists

當我運行下面的代碼時:

a=[0,1,2,3]
t=a
t.remove(3)
print(a)

即使我沒有對列表a使用remove()方法,它也給了我[0,1,2]的結果。 為什么會發生?

因為列表(和字典)在 Python 中是通過引用傳遞的。 如果您不希望它像這樣發生,則必須淺復制列表:

t=a[:]

或者

t=a.copy()

python 中的列表是可變對象,因此當您分配 t = a 時,您創建了列表 't',它是對列表 'a' 的引用。 兩個列表都引用相同的內存位置。

原單

a=[0,1,2,3]
id(a) # gives unique number which points to memory location
>> 60528136

分配給 t

t = a
id(t)
>> 60528136

結果顯示相同的數字,這表示兩個列表都指向相同的內存位置。 因此,對列表“a”的任何修改都將反映在列表“t”中,反之亦然。 為避免這種情況,請創建一個副本。

t = a[::]

或者

t = a.copy()
id(t)
>>60571720

此處查看有關編程常見問題的 Python 文檔。

為什么更改列表“y”也會更改列表“x”?

有兩個因素會產生這個結果:

  1. 變量只是引用對象的名稱。 執行 y = x 不會創建列表的副本——它會創建一個新變量 y,該變量引用 x 所引用的同一對象。 這意味着只有一個對象(列表),並且 x 和 y 都引用它。

  2. 列表是可變的,這意味着您可以更改其內容。

如何在 Python 中復制對象?

一般來說,在一般情況下嘗試copy.copy()copy.deepcopy() 並非所有對象都可以復制,但大多數可以。

某些對象可以更容易地復制。 字典有一個copy()方法:

newdict = olddict.copy()

可以通過切片復制序列:

new_l = l[:]

暫無
暫無

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

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