簡體   English   中英

為什么子類的浮點變量和父類的浮點變量class的地址是同一個memory地址?

[英]Why is the floating-point variable of the subclass the same memory address as the floating-point variable of the parent class?

如代碼所示,建立了一個父類 class ClassA ,它有一個變量var1 ,一個子類ClassB繼承了父 class ,它有一個變量var2 結果var1var2的地址是一樣的,這是為什么呢?

結果,無論我為var1還是var2賦值,兩者的值都是相同的。 這是什么原因?

我的代碼如下:

class ClassA:
    def __init__(self):
        self.var1: float = 0


class ClassB(ClassA):
    def __init__(self):
        super(ClassB, self).__init__()
        self.var2: float = 0
        print(id(self.var1) == id(self.var2))


a = ClassB()

我得到的結果:

True

我的預期結果:

False

嘗試了很多次,只有這樣才能達到我的目的:

class ClassA:
    def __init__(self):
        self.var1: float = float('nan')


class ClassB(ClassA):
    def __init__(self):
        super(ClassB, self).__init__()
        self.var2: float = float('nan')
        print(id(self.var1) == id(self.var2))


a = ClassB()

False

It's due to how python handle the memory, for some immutable types such as integer or string there are some values that are "common" and cached by python, then when you try to use the same value some other place the cached value is used making它是同一個地址。

0是 python 緩存的整數值的一部分,因此在您的情況下地址是相同的。

是的,即使您將其聲明為浮點數,您的值也是 integer,唯一要做的就是檢查該值是否與浮點數匹配並且 0 是否與浮點數匹配,即使它是 int 也是如此。

您可以通過以下方式驗證這一點

>>> a:float = 0
>>> a
0
>>> type(a)
<class 'int'>
>>>
>>> b:float = 0.0
>>> b
0.0
>>> type(b)
<class 'float'>
>>>

有關更多詳細信息,我建議您查看此答案

暫無
暫無

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

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