亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在列表的情況下使用共享引用時遇到問題

在列表的情況下使用共享引用時遇到問題

慕桂英3389331 2022-08-16 18:44:41
a=b=[1,2,3]print (a is b) #True但a=[1,2,3]print (a is [1,2,3]) #False  為什么第二部分打???False
查看完整描述

3 回答

?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

Python 中的多重賦值會創建兩個指向同一對象的名稱。例如


>>> a=b=[1,2,3]

>>> a[0] = 10

>>> b

[10, 2, 3]

is可用于檢查兩個名稱(和)是否保存對同一內存位置(對象)的引用。因此ab


a=b=[1,2,3]  # a and b hold the same reference

print (a is b) # True

現在在這個例子中,


a = [1,2,3]

print (a is [1,2,3]) # False

a不持有對對象的相同引用,即使 并且是具有相同元素的列表。[1, 2, 3]a[1, 2, 3]


如果要比較兩個列表是否包含相同的元素,可以使用:==


>>> a=b=[1, 2, 3]

>>> a == b

True

>>> 

>>> a = [1, 2, 3]

>>> a == [1, 2, 3]

True


查看完整回答
反對 回復 2022-08-16
?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

您的第一個顯式地對列表創建的對象進行引用并顯示。ab[1,2,3]


在第二個代碼中,列表顯示的兩種用法都必然會創建新對象,因為列表是可變的,并且您不希望隱式共享對它們的引用。[1,2,3]list


考慮一個更簡單的例子:


a = []

b = []

a.append(1)

是否也要進行修改?b


對于不可變值(如 s),語言實現可能會導致文本重用對現有對象的引用,但這不是可以依賴的。int


查看完整回答
反對 回復 2022-08-16
?
四季花海

TA貢獻1811條經驗 獲得超5個贊

問題是您正在使用的邏輯運算符。您詢問的是這些相同的對象是否與,而不是它們是否相等(相同的數據)。一個是對象的引用,另一個是對象,所以即使它們相等,它們也不相同。is


為什么選擇您的結果

當您設置并作為同一列表時,您正在說并且應該鏈接并且應該引用相同的數據,以便它們彼此相同,但不是對象,它們是對相同列表的引用。ababab[1,2,3]


總結

==- 等于(相同)。


is- 相同。


因此,如果您想檢查它們是否相等(相同),請使用:


>>> a=[1,2,3]

>>> print (a == [1,2,3])

True

值得一讀的類似問題:“==”和“is”之間有區別嗎?


希望這有幫助,哈利。


查看完整回答
反對 回復 2022-08-16
  • 3 回答
  • 0 關注
  • 110 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號