提问人:jaried 提问时间:8/18/2022 最后编辑:jaried 更新时间:8/18/2022 访问量:32
为什么子类的浮点变量与父类的浮点变量是相同的内存地址?
Why is the floating-point variable of the subclass the same memory address as the floating-point variable of the parent class?
问:
如代码所示,建立了一个父类,该父类具有一个变量 ,并且子类继承了具有变量 的父类。结果,和的地址是一样的,为什么会这样?ClassA
var1
ClassB
var2
var1
var2
因此,无论我给 或 赋值,两者的值都是相同的。这是什么原因?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
答:
1赞
Xiidref
8/18/2022
#1
这是由于 python 如何处理内存,对于某些不可变类型,例如整数或字符串,有一些值是“通用”的并由 python 缓存,然后当您尝试使用相同的值时,在其他地方使用缓存值使其成为相同的地址。
是 python 缓存的整数值的一部分,因此在您的情况下,地址是相同的。0
是的,即使您将值声明为浮点数,您的值也是一个整数,唯一要做的就是检查值是否与浮点数匹配,而 0 是否与浮点数匹配,即使它是整数。
您可以通过以下方式验证这一点
>>> a:float = 0
>>> a
0
>>> type(a)
<class 'int'>
>>>
>>> b:float = 0.0
>>> b
0.0
>>> type(b)
<class 'float'>
>>>
有关更多详细信息,我建议您查看此答案
评论