![](/img/trans.png)
[英]How can 2 objects be considered not equal and not identicial by Python, but have the same id?
[英]python objects are equal with different id's
我試圖理解字符串比較,因為我經歷了整數比較或字符比較,其中 python 比較內存中對象的 id。
如果是的話,那么句子比較的方式是否相同,那么下面的結果對象 id 不同,但結果為 True
a = "The Security Challenges Posed By 'Megxit'"
b = "The Security Challenges Posed By 'Megxit'"
print(id(a))
print(id(b))
print(a == b)
140133147022320
140133147021936
True
==
用於相等比較(不是身份比較)。 要比較身份(即 ID),您可以使用is
:
a = "The Security Challenges Posed By 'Megxit'"
b = "The Security Challenges Posed By 'Megxit'"
print(a == b) # True
print(a is b) # False
對象 ID 是該對象在其生命周期內的唯一整數。 這也是對象在內存中的地址。 當您比較 a 和 b 時,您是在比較 a 的內容是否等於 b。 在您的情況下返回 True。
比較對象 ID 總是會給你一個錯誤,因為它們在每個對象的生命周期中都是唯一的。
您可以使用“is”來比較 ID
print(a is b)
或比較 id()s
print(id(a) == id(b))
在python中有兩種類型的相等性- ==
和is
。
is
就像你所期望的比較工作-它返回True
如果兩個項目具有相同的ID。 a is b
和id(a) == id(b)
之間沒有區別。 只有當兩個對象實際上是同一個對象時,它們才具有相同的 id——這意味着它們在內存中的同一位置,並且a
和b
只是對同一對象的兩個引用。
當您創建兩個相同的字符串時,python 可能能夠理解它們是同一個字符串,只創建一次並為您提供對同一字符串的兩個引用 - 這不是問題,因為字符串是不可變的。 但是,在許多情況下,在您的情況下也是如此,即使兩個對象相同,python 也會創建兩個單獨的實例。 在這種情況下,它們的 id 不會相同,但它們的內容會 - 這就是==
的用途。
==
僅在對象內容相同時才返回True
(您可以通過實現__eq__
方法來覆蓋它在類中的行為方式)。 這就是為什么你通常要使用==
,除非你正在試圖找出如果兩個變量實際上指向同樣的事情,在這種情況下使用is
,或id(a) == id(b)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.