What gets printed?()
kvps = { '1' : 1, '2' : 2 } theCopy = kvps.copy() kvps['1'] = 5 sum = kvps['1'] + theCopy['1'] print sum
1、b = a: 赋值引用,a 和 b 都指向同一个对象。
2、b = a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。
b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。
本题考查的是 dict 类型中 copy() 方法的使用,正确答案应选 C。
首先来吐槽一下排版,不然直接报语法错误,免得有的人一上来就选 E。
kvps = { '1' : 1, '2' : 2 } theCopy = kvps.copy() kvps['1'] = 5 sum = kvps['1'] + theCopy['1'] print sum
详情可参考:
import copy d = {'1': [1, 1, 1], '2': 2} copy1 = d copy2 = d.copy() copy3 = copy.copy(d) copy4 = copy.deepcopy(d) d['1'][0] = 3 d['2'] = 3 print(copy1, copy2, copy3, copy4)打印结果分比为
{'1': [3, 1, 1], '2': 3}
{'1': [3, 1, 1], '2': 2}
{'1': [3, 1, 1], '2': 2}
{'1': [1, 1, 1], '2': 2}
{'1': 250, '2': 2, '3': [1, 2], '4': 'abc'} {'1': 1, '2': 2, '3': [1, 2], 4: 'abc'}
{'1': 1, '2': 2, '3': [1, 2], '4': 'def'} {'1': 1, '2': 2, '3': [1, 2], '4': 'abc'}
{'1': 1, '2': 2, '3': [1, 2, 3], '4': 'abc'} {'1': 1, '2': 2, '3': [1, 2], '4': 'abc'}
{'1': 1, '2': 2, '3': [2, 2], '4': 'abc'} {'1': 1, '2': 2, '3': [2, 2], '4': 'abc'}
# dict.copy : Return a shallow copy of the dictionary. # for example, In [1]: dict1 = {1:1, 2:[2,4]} In [2]: dict_copy = dict1.copy() In [3]: dict1[2][0] = 3 In [4]: dict_copy Out[5]: {1: 1, 2: [3, 4]} In [6]: dict1[1] = 0 In [7]: dict_copy Out[8]: {1: 1, 2: [3, 4]}
import copy c0 = { '1' : 1 , 1 : [1,2]} c1 = c0 c2 = copy.copy(c0) c3 = copy.deepcopy(c0) c4 = c0.copy() #返回一个浅拷贝 c0['1'] = 5 c0['4'] = 1 c0[1].append(4) print("c0",c0) #c0 {'1': 5, 1: [1, 2, 4], '4': 1} print("c1",c1) #c1 {'1': 5, 1: [1, 2, 4], '4': 1} print("c2",c2) #c2 {'1': 1, 1: [1, 2, 4]} print("c3",c3) #c3 {'1': 1, 1: [1, 2]} print("c4",c4) #c4 {'1': 1, 1: [1, 2, 4]}
浅拷贝: 拷贝的是对象的引用,原数据改变时,拷贝数据也发生改变。但是变不变要看修改的那个数据是不是可变的,例如int就是不可变的,list就是可变的,truple是不可变的(切片,赋值,调用copy模块的copy方法)
深拷贝: 拷贝的是对象的元素,原数据改变时,拷贝数据不发生改变。没有关系,是两个独立的对象(用copy模块的deepcopy方法)
('a = ', [1, 2, 3, 4, ['a', 'b', 'c'], 5]) ('b = ', [1, 2, 3, 4, ['a', 'b', 'c'], 5]) ('c = ', [1, 2, 3, 4, ['a', 'b', 'c']]) ('d = ', [1, 2, 3, 4, ['a', 'b']])