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

更多精彩