本质上和语言无关, 是三种复制对象的方式.
数据在物理地址中的内容, 这个物理地址需要用地址寻址.
那么复制就有多种办法, 例如使两个变量指向同一个地址, 或是创建一份新的物理地址存储同样内容(深拷贝).
对象的本质是(名称, 地址)(引用), 编程时用名称代替 使用时直接寻址到内容
而c语言的指针(很多语言没有指针)从外表看它存储的是地址(名称, 地址) 具有直接操作地址的能力
c语言对普通变量的赋值可能是拷贝
python赋值是对地址的引用
变量实际上的表示是a(addr) -> addr[content]
指针(in C) p(addr) -> addr[addr’]
浅拷贝和赋值: (赋值是一个过程)
浅拷贝创建一个新对象
-----------------------------------------------
直接赋值:其实就是对象的引用(别名)。新老变量同时指向同一片内存,对新变量所做的任何修改都会连带修改老变量
浅拷贝(copy):拷贝[父对象](只有一层),不会拷贝对象的内部的子对象。对象的内部的子对象还是直接赋值,所以如果修改父对象,不会对原变量的父对象造成影响,但是修改如果内部的子对象,则会连带修改原对象的子对象,因为共用一个引用。
深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。父对象和内部子对象都拷贝到新空间,对新变量所做的任何修改,不会对原变量 a 造成任何影响