proer 发表于 2020-7-15 09:44:44

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)输出的内存地址不一样,感谢

冬雪雪冬 发表于 2020-7-15 09:49:30

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地址

proer 发表于 2020-7-15 10:28:19

冬雪雪冬 发表于 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的内存地址问题,有什么相关书籍推荐吗,谢谢

Hello. 发表于 2020-7-15 11:01:44

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:}

冬雪雪冬 发表于 2020-7-15 11:05:45

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>
我的体会,不必特意去研究地址问题。

proer 发表于 2020-7-15 14:18:20

冬雪雪冬 发表于 2020-7-15 11:05
print(a.test)#   #实例化a的地址
print(cla().test)##cla()又是一个新的实例化,地址自然不同。

...

感谢

proer 发表于 2020-7-15 14:18:58

Hello. 发表于 2020-7-15 11:01
表示的是实例化对象 a 中的内存地址

表示的是 cla() 重新再一次实例化后的内存地址


感谢
页: [1]
查看完整版本: python中类的内存空间问题