深拷贝和浅拷贝
import copy # 浅拷贝 print("浅拷贝:") a = [1, 2, 3] b = a a.append(4) print(a, "-" * 5, b) print(id(a), "=" * 5, id(b)) print("结论:a、b指向同一内存空间,并没有新开辟空间") # 深拷贝 print("*" * 60) print("深拷贝:") a = [1, 2, 3] b = copy.deepcopy(a) a.append(4) print(a, "-" * 5, b) print(id(a), "=" * 5, id(b)) print("结论:b新建的一内存空间,里面的值即为a指向的内存空间的值") # 进一步理解拷贝 print("*" * 60) print("进一步理解拷贝:") print("浅拷贝:") a = [1, 2, 3] b = [4, 5, 6] c = [a, b] d = c b.append(7) print(c, "-" * 5, d) print(id(c), "=" * 5, id(d)) print("结论:这样的拷贝即浅拷贝,d、c指向同一内存空间") print("*" * 30) print("深拷贝:") d = copy.deepcopy(c) b.append(8) print(c, "-" * 5, d) print(id(c), "=" * 5, id(d)) print("结论:d新建的一个内存空间,内存空间里面呢,又指向了两个新的列表,这两个新的列表里面放的是a、b的值(都是全新的)") print(" *" * 30) print("补充:(这个牛逼了,半深半浅的拷贝)") d =copy.copy(c) b.append(9) print(c, "-" * 5, d) print(id(c), "=" * 5, id(d)) print("结论:d新建了一个内存空间,内存空间里面有两个指针,它呢," "它指向的还是原来的a、b,不是新的a、b(copy.copy()仅仅只对c做了一层判断,元组浅拷贝,列表深拷贝)") # 拷贝的其他形式 # 浅拷贝对不可变类型和可变类型的copy不同 print("*" * 60) print("可变类型:") a = [1,2,3] b = copy.copy(a) a.append(4) print(a, "-" * 5, b) print(id(a), "=" * 5, id(b)) print() print("不可变类型(元组):") a = (1,2,3) b = copy.copy(a) print(id(a), "=" * 5, id(b)) print("结论:可变类型的copy新建的一个内存空间,不可变类型的copy还是指向原来的内存空间")