赋值:操作的是栈内存中的复制
>>> a = 10 >>> b = a >>> a 10 >>> b 10
浅拷贝:对象是存放在堆内存
>>> ls = [1,2,3] >>> ls [1, 2, 3] >>> ls1 = ls >>> ls1 [1, 2, 3] >>> id(ls1) 2409850982976 >>> id(ls) 2409850982976 >>> ls2 = ls.copy() >>> ls [1, 2, 3] >>> ls2 [1, 2, 3] >>> ls == ls2 True >>> id(ls) 2409850982976 >>> id(ls2) 2409854617728
python中提供对象的拷贝----copy()
import copy
copy.copy()----浅拷贝
当拷贝后,原被拷贝的数据发生改变,拷贝的数据也会跟着发生改变
深拷贝----copy.deepcopy()
>>> import copy
>>> ls3 = copy.deepcopy(ls)
>>> ls3
[1, 2, 3, 4, 5, ['哈哈哈哈', 1, 2, 3, 4, 5]]
>>> ls
[1, 2, 3, 4, 5, ['哈哈哈哈', 1, 2, 3, 4, 5]]
>>> ls[5].append(6)
>>> ls
[1, 2, 3, 4, 5, ['哈哈哈哈', 1, 2, 3, 4, 5, 6]]
>>> ls3
[1, 2, 3, 4, 5, ['哈哈哈哈', 1, 2, 3, 4, 5]]
总结:一般建议所有浅拷贝(只拷贝一层,效率比较高,占用内存比较少)如果要完整脱离,需要深拷贝
不可变类型,浅拷贝和深拷贝是一样的