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

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。