簡體   English   中英

這兩條線有什么區別?

[英]What are the differences between these two lines?

friends = my[:] #1
friends[:] = my #2

兩個變量都可以是列表或字符串,即可迭代。 我正在學習 python。

  1. 我不明白這些行是如何工作的。 你能解釋一下嗎?
  2. 兩條線有什么區別?

第一行將friends重新綁定到一個新序列,該序列是my的淺拷貝(真的,它可以做任何事情,但假設my不是memoryview或像numpy數組這樣的奇怪第三方類型,那通常是整個序列)。

第二行將friends內容(必須是可變的)重新分配給可迭代my中的任何內容(同樣,奇怪的friends覆蓋可以改變這一點); my不需要是一個序列,一個普通的迭代器也可以工作,並且會在填充friends的過程中耗盡。

在這兩種情況下,它都是一個淺拷貝(在my任何一行之后重新分配或附加/彈出元素都不會改變friends )。 主要區別在於第一行是對新序列的重新綁定,而后者是在原地更改friends 這在兩個方面很重要:

  1. 別名:如果任何其他名稱綁定到與friends相同的序列,第一個選項不會影響別名(重新綁定會丟棄舊引用,因此其他別名保留它, friends不會),而第二個選項修改其他別名
  2. 類型保存:第二個選項不改變friends的類型,只是替換內容。 第一個選項不關心以前的friends是什么(它可能是像int這樣的非序列),它最終會成為切片產生的任何東西(例如,如果my是一個list ,那么之后friends會成為一個list )。

使用此設置的具體示例:

friends = [1, 2, 3]
alsofriends = friends
my = (4, 5, 6)

如果你使用第 1 行,那么在那一行之后, friends(4, 5, 6) ,而且alsofriends仍然是[1, 2, 3] (它不再與friends相關)。

如果你使用第 2 行,那么在那一行之后, friends[4, 5, 6] (來自my的內容,但仍然是一個list ),而且現在的alsofriends也是[4, 5, 6] (它仍然是friends ,並且共享list的內容現在與從my復制的內容匹配)。

暫無
暫無

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

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