重用Python中的名称来节省内存

daG*_*vis 1 python memory variables memory-management copy

Hitchhiker的Python指南指出重用变量名称是好事.

foo = Spam()
bar = foo.eggs()
Run Code Online (Sandbox Code Playgroud)

而且我同意它.它使代码可读.

如果变量是40 MB的数据怎么办?它会复制自己,总共有80 MB吗?

foo = buffer  # 40 MB.
bar = foo.resize((50, 50))  # +40?
Run Code Online (Sandbox Code Playgroud)

我知道在执行函数时会释放内存,但我仍然认为只有因为可读性而在一个app状态下使用两倍高的内存才是个好主意.这就像一个特例,但另一方面,特殊情况不够特别,是吧?

pep*_*epr 6

Python赋值只是将引用值复制到目标对象.没有数据复制.Python变量只是Python系统字典中的名称加上值,该值是对象的参考值.

实际上,你应该小心分配.任何Python赋值都意味着共享参考值.Python赋值绝不意味着复制目标对象.使用字符串或数字等不可变对象时,不会出现任何问题.但是,当您分配任何可变对象(列表,字典,集合,某些用户对象)时,您应该知道在此之后您只给目标对象一个不同的名称(通过另一个参考值副本访问).

将对象作为函数/方法参数传递也是如此.