chenzhanyiczy 发表于 2014-05-11 21:40

python问题


x="123"

"123"是个对象,getsizeof()是“123”的占用大小。x是个对象的引用。 那么x本身占用内存空间吗?

如果x占用空间,那么通过什么方法取得大小? 如果x只是一个别名,不占用任何空间,那么比如b=x的时候,python是如何通过x,找到x引用的对象?

PS:这里人气稍微好点,就放到这里来问吧。

folklore 发表于 2014-05-12 16:25

这是因为x本身的元数据是不包括在大小中的。
正如文件目录项本身的大小不包括在文件大小中。

timespace 发表于 2014-05-12 17:22

那么x本身占用内存空间吗?如果x占用空间,那么通过什么方法取得大小?Python变量都是引用,对象内存都在堆上分配。x本身是一个符号,在locals/globals动态绑定,x关联一个指针(PyObject *),该指针指向实际对象,更应该关注实际对象的内存占用。那么比如b=x的时候,python是如何通过x,找到x引用的对象?既然是用指针实现引用,怎么找的问题就显然了。

chenzhanyiczy 发表于 2014-05-12 19:44

本帖最后由 chenzhanyiczy 于 2014-05-12 19:45 编辑

回复 3# timespace


那么这样讲的话,x虽然是一个符号,但还是要有一块内存保存相应对象地址,对吧?

如果这样,因为py是解析型脚本,解析器是如何通过x快速找到那块内存的? 我是想,如果这种符号(也就是py变量)很多的话,他用的是什么高效算法?

timespace 发表于 2014-05-12 20:11

回复 4# chenzhanyiczy
如果x是局部变量,locals返回的就是所有局部符号,是一个dict。一个局部作用域能有几个符号?占用内存忽略不计吧。至于dict的效率,起码在此处不会拖后腿。


   

windoze 发表于 2014-05-13 10:31

x会在local scope(这是一个hash table)里占据一个entry,key你可以认为就是一个字符串"x",value你可以认为就是一个指针,指向一个对象,这个对象的内容就是"xxx"

PS. 话说天涯的人气更好,不去那儿问可惜了。
页: [1]
查看完整版本: python问题