python 深浅拷贝

 1 # -*- coding: utf-8 -*-
 2 # @author: Tele
 3 # @Time  : 2019/04/18 下午 3:53
 4 # 深拷贝与浅拷贝
 5 import copy
 6 
 7 # 浅拷贝只拷贝一层(对于内部元素只是拷贝引用),创建新的对象
 8 a = [1, 2, 11]
 9 b = copy.copy(a)
10 print(id(a) == id(b))  # False,b指向了新的对象
11 
12 c = [a]
13 d = copy.copy(c)
14 print(id(c) == id(d))  # False
15 a.append("asdad")
16 print(c[0] == d[0])  # True,说明内部的a拷贝时只拷贝了a的引用
17 print(c[0])  # [1, 2, 11, 'asdad']
18 print(d[0])  # [1, 2, 11, 'asdad']
19 
20 print("*" * 30)
21 
22 # 深拷贝完整的拷贝变量及其指向的对象
23 b = copy.deepcopy(a)
24 print(id(a) == id(b))  # False,b指向了新的对象
25 
26 c = [a]
27 d = copy.deepcopy(c)
28 print(id(c) == id(d))  # False
29 a.append("asdad")
30 print(c[0] == d[0])  # False
31 print(c[0])  # [1, 2, 11, 'asdad', 'asdad']
32 print(d[0])  # [1, 2, 11, 'asdad']
33 
34 # 对于不可变类型,copy与deepcopy都只是拷贝引用,不创建新的对象
35 t = (1, 23, 5)
36 c = copy.copy(t)
37 print(id(c) == id(t))  # True
38 
39 d = copy.deepcopy(t)
40 print(id(d) == id(t) == id(c))  # True
41 
42 # 对于不可变类型对象内部的元素,同样遵循上面的规则
43 a = ["asd", 123, 123]
44 t = (a, 1, 34)
45 c = copy.copy(t)
46 d = copy.deepcopy(t)
47 a.append("xx")
48 print(c[0] == t[0])  # True,对于元组内部的列表a拷贝引用
49 print(d[0] == t[0])  # False
原文地址:https://www.cnblogs.com/tele-share/p/10730277.html