簡體   English   中英

Python列表和平等

[英]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>

注意不同的地址。

Python 2.x: 類型對象的功能根據對象在內存中的地址實現豐富的比較

Python 3.x:注意函數不再可排序。 因此,例如the_cake.append > a_lie.append將引發錯誤消息。

這兩個答案都是有效的,但是也可以檢查一下:

>>> 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM