4 回答

TA貢獻(xiàn)1995條經(jīng)驗 獲得超2個贊
咳嗽
>>> a,b,c = (1,2,3)
>>> a
1
>>> b
2
>>> c
3
>>> a,b,c = ({'test':'a'},{'test':'b'},{'test':'c'})
>>> a
{'test': 'a'}
>>> b
{'test': 'b'}
>>> c
{'test': 'c'}
>>>

TA貢獻(xiàn)2051條經(jīng)驗 獲得超10個贊
是的,這是預(yù)期的行為。a,b和c都設(shè)置為同一列表的標(biāo)簽。如果需要三個不同的列表,則需要分別分配它們。您可以重復(fù)顯示列表,也可以使用多種方式之一復(fù)制列表:
b = a[:] # this does a shallow copy, which is good enough for this case
import copy
c = copy.deepcopy(a) # this does a deep copy, which matters if the list contains mutable objects
Python中的賦值語句不復(fù)制對象-它們將名稱綁定到對象,并且對象可以具有您設(shè)置的盡可能多的標(biāo)簽。在第一次編輯中,更改a [0],您將更新a,b和c都引用的單個列表中的一個元素。在第二次更改e中,您將e切換為其他對象的標(biāo)簽(4而不是3)。

TA貢獻(xiàn)1873條經(jīng)驗 獲得超9個贊
在python中,一切都是對象,也是“簡單”的變量類型(int,float等)。
更改變量值時,實際上是更改了它的指針,如果在兩個變量之間進(jìn)行比較,則會比較它們的指針。(要清楚,指針是物理計算機(jī)內(nèi)存中存儲變量的地址)。
結(jié)果,當(dāng)您更改內(nèi)部變量值時,將更改它在內(nèi)存中的值,并且會影響指向該地址的所有變量。
例如,當(dāng)您這樣做時:
a = b = 5
這意味著a和b指向內(nèi)存中包含值5的相同地址,但是在執(zhí)行以下操作時:
a = 6
它不會影響b,因為a現(xiàn)在指向包含6的另一個存儲位置,而b仍然指向包含5的存儲地址。
但是,當(dāng)您這樣做時:
a = b = [1,2,3]
a和b再次指向相同的位置,但是不同之處在于,如果更改列表值之一:
a[0] = 2
它會更改a所指向的內(nèi)存的值,但是a仍指向與b相同的地址,結(jié)果b也將更改。
添加回答
舉報