python里传对象引用相当于传地址
id()函数返回的是对象指向的内存地址
a=test表明是浅拷贝,a和test指向的还是同一片内存地址
b = test[:]则是深拷贝,相当于复制了一片内存地址,重新用变量b来指向这块新的内存地址
浅拷贝会发生的一个问题就是
浅拷贝:拷贝前,拷贝后用的是同一个内存地址,一旦值被修改,所有的都会跟着变
通过a修改了值的化,test也会变。可以用copy.copy或copy.deepcopy。
两者效率不一样,后者是用递归实现的,速度比copy.copy慢
不可变对象:int str float tuple,可变对象:dict set list
不可变对象:对象存放在地址中的值不会被改变(所谓的改变是创建了一块新的地址并把新的对象的值放在新地址中原来的对象并没有发生变化);可变对象:对象存放在地址中的值会原地改变
不可变对象str
可变对象list,值在原地改变,内存地址不变