可能这篇来自python documentation的文章可以帮助您理解python的作用:Nobody “owns” an object; however, you can own a reference to an
object. An object’s reference count is now defined as the number of
owned references to it. The owner of a reference is responsible for
calling Py_DECREF() when the reference is no longer needed. Ownership
of a reference can be transferred. There are three ways to dispose of
an owned reference: pass it on, store it, or call Py_DECREF().
Forgetting to dispose of an owned reference creates a memory leak.
现在,这指的是从C代码中使用python对象,但是,由于解释器正是这样做的,所以您可以理解在python中如何管理对象和引用。在
“没有人拥有一个对象”,所以当你把一个项目放到一个列表中时,这个列表并不复制这个项目,它只是拥有一个引用。实际上,它复制一个指针并增加引用计数(也可能减少被替换的另一个对象)。在
从python的角度来看,不能访问对象,只能访问对象的引用。
任何可以放入变量中的内容实际上都是对对象的引用。
因此,[1,2].append(3)不会复制3,而只是复制引用。在
如果您想复制一个对象,那么您应该使用copy模块
或者,对于某些类型,使用对象作为参数调用类(例如,int(1234)创建“1234”的副本,即使python将-5到256的整数和小字符串存储在一个小数组中,因此int(42)不会复制“42”)