鱼C论坛

 找回密码
 立即注册
查看: 1849|回复: 5

[已解决]对象不同方法return的id相同?

[复制链接]
发表于 2017-5-23 09:50:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
>>> class Person: #定义一个Person类
              def fun1(self): print('fun1')
              def fun2(sefl,name): print('fun2', name)
-----------------------------------------
>>> p1 = Person()
>>> id(p1.fun1()), id(p1.fun2('Jack')) # 查看p1中fun1和fun2中return的id
fun1
fun2 Jack
(1499168336, 1499168336)
---------------------------------------
两个不同方法return的id相同,怎么理解呢?谢谢



最佳答案
2017-5-23 14:53:16
我目测你测到的都是None的 id,不知道我说错了没有
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-23 14:53:16 | 显示全部楼层    本楼为最佳答案   
我目测你测到的都是None的 id,不知道我说错了没有
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-23 15:05:28 | 显示全部楼层
ooxx7788 发表于 2017-5-23 14:53
我目测你测到的都是None的 id,不知道我说错了没有

我也注意到这个问题了,但去掉括号,还是一样的。
>>> id(p1.fun1), id(p1.fun2)
(3919224, 3919224)
但分成2行就不一样了。
>>> id(p1.fun1)
44542032
>>> id(p1.fun2)
44829192
不知什么原因。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-23 15:39:32 | 显示全部楼层
本帖最后由 ooxx7788 于 2017-5-23 15:40 编辑
冬雪雪冬 发表于 2017-5-23 15:05
我也注意到这个问题了,但去掉括号,还是一样的。
>>> id(p1.fun1), id(p1.fun2)
(3919224, 3919224)


我的意思是,他并没有return,那他fun1,fun2的返回值都是None。
所以才会是一样的

  1. class Person:  # 定义一个Person类
  2.     def fun1(self): print('fun1')
  3.    
  4.     def fun2(sefl, name): print('fun2', name)
  5. p1 = Person()
  6. id(p1.fun1()), id(p1.fun2('Jack'))  # 查看p1中fun1和fun2中return的id
  7. fun1
  8. fun2 Jack
  9. Out[4]:
  10. (1930181488, 1930181488)
  11. type(p1.fun1())
  12. fun1
  13. Out[5]:
  14. NoneType
  15. id(None)
  16. Out[6]:
  17. 1930181488
  18. id(p1.fun1())
  19. fun1
  20. Out[7]:
  21. 1930181488
  22. id(p1.fun2('Jack'))
  23. fun2 Jack
  24. Out[8]:
  25. 1930181488
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-23 15:41:40 | 显示全部楼层
ooxx7788 发表于 2017-5-23 15:39
我的意思是,他并没有return,那他fun1,fun2的返回值都是None。
所以才会是一样的

是的,没有return,测试的又是fun1(),自然返回的是None的地址了。但我修改了它的问题,还是得到奇怪的结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-23 15:47:58 | 显示全部楼层
冬雪雪冬 发表于 2017-5-23 15:41
是的,没有return,测试的又是fun1(),自然返回的是None的地址了。但我修改了它的问题,还是得到奇怪的结 ...


呵呵,你再试试,连续打id(p1.fun1)会得到一个结果,但是中间空一行就会得到另外一个结果。
我估计是当时先生成了一个地址,隔行以后,垃圾回收了,就又生成新的地址了。
  1. class Person:  # 定义一个Person类
  2.     def fun1(self): print('fun1')
  3.    
  4.     def fun2(self, name): print('fun2', name)
  5. p1 = Person()
  6. id(p1.fun1), id(p1.fun2)  # 查看p1中fun1和fun2中return的id
  7. Out[4]:
  8. (164961702472, 164961702472)
  9. id(p1)
  10. Out[5]:
  11. 165029400192
  12. id(p1.fun1)
  13. Out[6]:
  14. 165028853512
  15. id(p1.fun2)
  16. Out[7]:
  17. 165028853512
  18. id(p1)
  19. Out[8]:
  20. 165029400192
  21. id(p1.fun1())
  22. fun1
  23. Out[9]:
  24. 1930181488
  25. id(p1.fun2('Jack'))
  26. fun2 Jack
  27. Out[10]:
  28. 1930181488
  29. id(None)
  30. Out[11]:
  31. 1930181488
  32. id(p1.fun1), id(p1.fun2)
  33. Out[12]:
  34. (165028853768, 165028853768)
  35. id(p1.fun1)
  36. Out[13]:
  37. 165028853768
  38. id(p1.fun2)
  39. Out[14]:
  40. 165028853896
  41. id(p1.fun2)
  42. Out[15]:
  43. 165028853512
  44. id(p1.fun2)
  45. Out[16]:
  46. 165028853576
  47. id(p1.fun2)
  48. Out[17]:
  49. 165028853576
  50. id(p1.fun1)
  51. Out[18]:
  52. 165028853576
  53. id(p1.fun1)
  54. Out[19]:
  55. 165028853576
  56. id(p1.fun1)
  57. Out[20]:
  58. 165028853576
  59. id(p1.fun2)
  60. Out[21]:
  61. 165028853576
  62. id(p1.fun2)
  63. Out[22]:
  64. 165028853576
  65. id(p1.fun2)
  66. Out[23]:
  67. 165028853832
  68. id(p1.fun1)
  69. Out[24]:
  70. 165028853832
  71. id(p1)
  72. Out[25]:
  73. 165029400192
  74. id(p1.fun1)
  75. Out[26]:
  76. 165028853512
  77. id(p1.fun1)
  78. Out[27]:
  79. 165028853512
  80. id(p1.fun1)
  81. Out[28]:
  82. 165028853640
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-19 18:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表