python中类的内存空间问题
class cla:def __init__(self):
pass
def test(self):
pass
# return self.test
a=cla()
print(a.test)# <bound method cla.test of <__main__.cla object at 0x0000027D13E4CDC8>>
print(id(a.test)) # 2736195719240
print(cla.__dict__)# 'test': <function cla.test at 0x0000027D13CD1828>
请问为什么a.test和id(a.test)输出的内存地址不一样,感谢 print(a.test)# <bound method cla.test of <__main__.cla object at 0x0000027D13E4CDC8>> # 显示cla的地址
print(id(a.test)) # 2736195719240 #显示实例化a的test地址
print(cla.__dict__)# 'test': <function cla.test at 0x0000027D13CD1828> #显示类cla的test地址 冬雪雪冬 发表于 2020-7-15 09:49
print(a.test)# # 显示cla的地址
print(id(a.test)) # 2736195719240 #显示实例化a的test地址
...
再请教一下,请问下面两个的区别是什么
print(a.test)# <bound method cla.test of <__main__.cla object at 0x0000027D13E4CDC8>>
print(cla().test)# <bound method cla.test of <__main__.cla object at 0x000001BB7DCACE88>>
怎样才能更好的了解python的内存地址问题,有什么相关书籍推荐吗,谢谢
proer 发表于 2020-7-15 10:28
再请教一下,请问下面两个的区别是什么
怎样才能更好的了解python的内存地址问题,有什么相关书籍推荐 ...
01.print(a.test)# <bound method cla.test of <__main__.cla object at 0x0000027D13E4CDC8>>表示的是实例化对象 a 中的内存地址
02.print(cla().test)# <bound method cla.test of <__main__.cla object at 0x000001BB7DCACE88>>表示的是 cla() 重新再一次实例化后的内存地址
第一个是cla() 实例化一次后赋值给了 a , 而第二个是再次实例化 所以两次的内存地址不同
书籍不清楚,但是你可以看看这些文章,有助于你的了解:
了解Python中的内存分配和管理
Python id() 函数
static/image/hrline/1.gif
如果帮到你了,设置下最佳可好呀↗{:10_297:} print(a.test)# <bound method cla.test of <__main__.cla object at 0x0000027D13E4CDC8>>#实例化a的地址
print(cla().test)# <bound method cla.test of <__main__.cla object at 0x000001BB7DCACE88>> #cla()又是一个新的实例化,地址自然不同。
怎样才能更好的了解python的内存地址问题,有什么相关书籍推荐吗,谢谢#对于python而言,并不能直接操纵地址,显示的地址只是验证是否为同一对象。
例如
>>> class A:
pass
>>> a1 = A()
>>> print(a1)
<__main__.A object at 0x00000171700E8580>
>>> a2 = a1
>>> print(a2)
<__main__.A object at 0x00000171700E8580>
我的体会,不必特意去研究地址问题。 冬雪雪冬 发表于 2020-7-15 11:05
print(a.test)# #实例化a的地址
print(cla().test)##cla()又是一个新的实例化,地址自然不同。
...
感谢 Hello. 发表于 2020-7-15 11:01
表示的是实例化对象 a 中的内存地址
表示的是 cla() 重新再一次实例化后的内存地址
感谢
页:
[1]