1、对于python对象的引用,即把一个对象直接赋值给另外一个对象;

代码如下:

python相对引用出错 python对象引用_python相对引用出错

b对象和a对象完全一样;创建一个新的变量,传递a的引用,内存地址,b和a完全一样,这就是引用传递的含义吧。即两个变量指向一个内存地址,参考大佬的图解如下:

python相对引用出错 python对象引用_不可变对象_02


2、浅拷贝

b变量会对a对象中的地址复制一份,但是不会拷贝内部的元素;

python相对引用出错 python对象引用_python相对引用出错_03


可以看出c变量的地址和a的不同,但是内部元素存储的地址完全相同,对于浅拷贝来说,只会保存原有对象的内存地址,但是不会保存内部的元素;(即如果原有对象内部元素的内存地址改变,在浅拷贝后的变量中是看不出来的),但是,如果内部元素的内存地址不改变,在浅拷贝后的变量中是可以显示出来的,例如,对于,不可变对象,a[0]=‘hello’ ,新建立一个对象’hello’, 改变了元素的地址,但是对于可变对象list之类的,是不会改变元素地址的,图解如下:

python相对引用出错 python对象引用_内存地址_04


我的理解是只拷贝过来了内部元素的地址;

python相对引用出错 python对象引用_不可变对象_05


在list中添加后,内存地址没变,所以c也会改变;3、深拷贝

所有部分都拷贝过来了,也保存了内部的元素,即两部分互不干扰;

python相对引用出错 python对象引用_浅拷贝_06


可以看出不是简单的拷贝内存地址,其中a[2]是list,可变类型,地址就不再相同,即a[2]的变化不会影响到d[2];同时由于a[0]是不可变类型,因此a[0]和d[0]也相互不影响;下面我们进行测试:(int,string,float,tuple)都是不可变对象;

python相对引用出错 python对象引用_内存地址_07


个人见解,如有错误请直接指出。