[英]What are the differences between these two lines?
friends = my[:] #1
friends[:] = my #2
兩個變量都可以是列表或字符串,即可迭代。 我正在學習 python。
第一行將friends
重新綁定到一個新序列,該序列是my
的淺拷貝(真的,它可以做任何事情,但假設my
不是memoryview
或像numpy
數組這樣的奇怪第三方類型,那通常是整個序列)。
第二行將friends
的內容(必須是可變的)重新分配給可迭代my
中的任何內容(同樣,奇怪的friends
覆蓋可以改變這一點); my
不需要是一個序列,一個普通的迭代器也可以工作,並且會在填充friends
的過程中耗盡。
在這兩種情況下,它都是一個淺拷貝(在my
任何一行之后重新分配或附加/彈出元素都不會改變friends
)。 主要區別在於第一行是對新序列的重新綁定,而后者是在原地更改friends
。 這在兩個方面很重要:
friends
相同的序列,第一個選項不會影響別名(重新綁定會丟棄舊引用,因此其他別名保留它, friends
不會),而第二個選項修改其他別名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.