[英]Python Lists and Equality
我正在為期中考試而練習,並且遇到了:
the_cake = [1,2,[3],4,5]
a_lie = the_cake[1:4]
the_cake = the_cake[1:4]
great = a_lie
delicious = the_cake
moist = great[:-1]
在Python解釋器中運行此代碼后,原因是:
the_cake.append == a_lie.append
False
我的想法是,它們是平等的方法,盡管不是“ IS”,但應實現平等。
也許由於實例化而將其評估為False? 如果是這樣,那么比較時類屬性的評估結果是否為True? 這是列表對象的特例嗎?
后續:據此: Python中的==和is是有區別的嗎?
“如果兩個變量指向同一個對象,IS將返回True;如果變量所引用的對象相等,則==”。
然后,List類的方法是否指向“ append”方法的單獨實例?
因此,如果我定義一個函數x(parameter),則每次調用它時,它都會相同,因為它是分配給不同變量的同一對象,對嗎?
然后對於一些等效變量“參數”:
x(parameter) == x(parameter)
True
謝謝!
這些方法及其各自的對象實例位於不同的位置。 例如,我們有:
a = []
b = []
因此,我們有:
>>> a.append == b.append
False
它們各自的位置在:
>>> a.append
<built-in method append of list object at 0x7f7c7c97d560>
>>> b.append
<built-in method append of list object at 0x7f7c7c97d908>
注意不同的地址。
這兩個答案都是有效的,但是也可以檢查一下:
>>> a = []
>>> b = a
>>> a.append == b.append
True
python中的列表切片總是返回一個新列表。 the_cake[1:4]
返回一個新列表。 因此,如果您每次都調用相同的片,這並不意味着它將返回相同的列表。 無論您是否一次又一次地執行相同的切片,每次調用它都會返回一個新列表。
即使您將相同的切片the_cake[1:4]
分配給a_lie
及其本身(即the_cake
),兩者都引用了一個與另一個列表不同的新列表。 因此,兩個列表在創建期間都分配了不同的存儲位置。 如果您檢查id(the_cake) == id(a_lie)
,它將返回False
。
因此,現在當您引用兩個實例的append時,它們也將有所不同。 即使引用了相同的方法,也從兩個不同的實例引用了該方法。 因此,它將為正在調用的方法創建不同的實例。 因此,在稱為the_cake.append時引用的實例與a_lie.append的實例不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.