参考文章link
变量和对象之间的关系为引用
1 第一次赋值时,即创建,之后 再次赋值 将会 改变 变量的值。
2 变量名本身是没有类型的,类型只存在对象中,变量只是引用了对象。
3 所有的变量,必须 在使用前 赋值,使用未赋值的变量会产生错误。
Python对象三要素:Id,Type,Value
Id:唯一标识一个对象
Type:标识对象的类型
Value:对象的值
== 指值相等。
is 指地址相等,即指引用相等。
变量是一个系统表的元素,拥有指向对象的连接的空间。
对象是分配的一块内存,有足够的空间去表示它们所代表的值。
引用是自动形成的从变量到对象的指针。
python里面复制对象时因对象而异,如list
values[:] 复制操作是所谓的「浅复制」(shallow copy)
存在问题:当被复制的list里有引用元素时,浅复制后的list中还是会共享改引用,导致相互干扰
1 | a = [0, [1, 2], 3] |
正确复制嵌套元素是进行“深复制”(deep copy)
1 | import copy |
引用和拷贝
没有限制条件的分片表达式(L[:])能够复制序列,但此法只能浅层复制。
字典 copy 方法,D.copy() 能够复制字典,但此法只能浅层复制。
有些内置函数,例如 list,能够生成拷贝 list(L)。
copy 标准库模块能够生成完整拷贝:deepcopy 本质上是递归 copy。