|
|
|
|
 请教: python对象内存地址问题?? - newjay [ 2005-10-08 21:14 | 709 byte(s)]
 Re: 请教: python对象内存地址问题?? - alula [ 2005-10-09 09:36 | 175 byte(s)]
 Re: 请教: python对象内存地址问题?? - newjay [ 2005-10-09 13:21 | 151 byte(s)]
 Re: 请教: python对象内存地址问题?? - alula [ 2005-10-10 09:06 | 99 byte(s)]
 Re: 请教: python对象内存地址问题?? - passworld [ 2005-10-10 15:46 | 135 byte(s)]
 Re: 请教: python对象内存地址问题?? - passworld [ 2005-10-10 15:48 | 141 byte(s)]
 Re: 请教: python对象内存地址问题?? - limodou [ 2005-10-08 21:33 | 218 byte(s)]
|
|
|
|
[Original]
[Print]
[Top]
|
一个python群中一个朋友谈到python内存管理方式时, 我做了如下试验, 大家观察s1[0], 第一次s1.__str__
与第二次s1.__str__ 的内存地址都是不一样的, 百思不得其解, 忘高手指点.....
#################################################
>>> s1='abcd'
>>> s1[0].__str__
<method-wrapper object at 0x00A5E368>
>>> s1.__str__
<method-wrapper object at 0x00A61C78>
>>> s1.__str__
<method-wrapper object at 0x00A63898>
>>>
#####################################################
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
要想深入了解只能去看程序去了。不过了解不了解关系不大,python是自动内存管理。如果我们不是研究解释程序的,知道如何正确使用足够了,没必要在这方面花费大量的时间。
当然如果能够明白最好,不知道也没有关系。
|
|
|
----
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
"method-wrapper object",这是理解这个问题的关键。
>>> s1.__str__
执行这一句 临时生成object,每个临时object有不同的地址很正常的
|
|
|
----
温故知新
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
这种东西应该是 implementation specific 的,看 cpython 的源码大概可以看出个所以然来。在 cpython 的源码里找 method-wrapper 吧。
|
|
----
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
cpython 里不论 method 还是 function 在 c 的层面应该都是用 c funtion 来实现的,在 runtime 再进行 binding 到具体 object instance 上。
|
|
|
----
|
|
[Original]
[Print]
[Top]
|
|
|