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

TA貢獻1784條經驗 獲得超2個贊
您的第一個顯式地對列表創建的對象進行引用并顯示。ab[1,2,3]
在第二個代碼中,列表顯示的兩種用法都必然會創建新對象,因為列表是可變的,并且您不希望隱式共享對它們的引用。[1,2,3]list
考慮一個更簡單的例子:
a = []
b = []
a.append(1)
是否也要進行修改?b
對于不可變值(如 s),語言實現可能會導致文本重用對現有對象的引用,但這不是可以依賴的。int

TA貢獻1811條經驗 獲得超5個贊
問題是您正在使用的邏輯運算符。您詢問的是這些相同的對象是否與,而不是它們是否相等(相同的數據)。一個是對象的引用,另一個是對象,所以即使它們相等,它們也不相同。is
為什么選擇您的結果
當您設置并作為同一列表時,您正在說并且應該鏈接并且應該引用相同的數據,以便它們彼此相同,但不是對象,它們是對相同列表的引用。ababab[1,2,3]
總結
==- 等于(相同)。
is- 相同。
因此,如果您想檢查它們是否相等(相同),請使用:
>>> a=[1,2,3]
>>> print (a == [1,2,3])
True
值得一讀的類似問題:“==”和“is”之間有區別嗎?
希望這有幫助,哈利。
添加回答
舉報