簡體   English   中英

python對象是相同的,具有不同的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 bid(a) == id(b)之間沒有區別。 只有當兩個對象實際上是同一個對象時,它們才具有相同的 id——這意味着它們在內存中的同一位置,並且ab只是對同一對象的兩個引用。

當您創建兩個相同的字符串時,python 可能能夠理解它們是同一個字符串,只創建一次並為您提供對同一字符串的兩個引用 - 這不是問題,因為字符串是不可變的。 但是,在許多情況下,在您的情況下也是如此,即使兩個對象相同,python 也會創建兩個單獨的實例。 在這種情況下,它們的 id 不會相同,但它們的內容會 - 這就是==的用途。

==僅在對象內容相同時才返回True (您可以通過實現__eq__方法來覆蓋它在類中的行為方式)。 這就是為什么你通常要使用== ,除非你正在試圖找出如果兩個變量實際上指向同樣的事情,在這種情況下使用is ,或id(a) == id(b)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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