copy,复制其包含的所有值,当然只管第一层。
浅复制
>>> a = 'abc'
>>> b = a
>>> id(a),id(b) 内存的位置
(140476358384784, 140476358384784)
>>> a = 'cdbe'
>>> id(a),id(b) 这里位置不同了
(140476357878336, 140476358384784)
>>> name_info
{'job': 'Engineer', 'name': 'jacky', 'age': 29, 'stuID': 1123, 'addr': 'beijing'}
>>> info2 = name_info
>>> info2
{'job': 'Engineer', 'name': 'jacky', 'age': 29, 'stuID': 1123, 'addr': 'beijing'}
>>> name_info['job'] = 'HR' 这里修改了,name_info和info2都被改了,因为内存地址相同
>>> info2
{'job': 'HR', 'name': 'jacky', 'age': 29, 'stuID': 1123, 'addr': 'beijing'}
>>> name_info
{'job': 'HR', 'name': 'jacky', 'age': 29, 'stuID': 1123, 'addr': 'beijing'}
>>> info2['job'] = 'Sales' 同上,因为内存位置指针一样
>>> info2
{'job': 'Sales', 'name': 'jacky', 'age': 29, 'stuID': 1123, 'addr': 'beijing'}
>>> name_info
{'job': 'Sales', 'name': 'jacky', 'age': 29, 'stuID': 1123, 'addr': 'beijing'}
name_info和info2内存地址一样
>>> id(info2['job'])
140476357878240
>>> id(name_info['job'])
140476357878240
字典里每个key都有自己的内存指针位置
>>> id(name_info['age'])
36360344
>>> id(name_info['stuID'])
36636488
为什么要把内存指针指向一个位置呢?为了减少内存空间消耗,类是于软连接。
copy浅复制(复制一份)
>>> info3 = name_info.copy()
>>> name_info
{'job': 'Sales', 'name': 'jacky', 'age': 29, 'stuID': 1123, 'addr': 'beijing'}
>>> info3
{'age': 29, 'job': 'Sales', 'stuID': 1123, 'name': 'jacky', 'addr': 'beijing'}
>>> name_info['Sex'] = 'M'
>>> name_info
{'job': 'Sales', 'name': 'jacky', 'age': 29, 'Sex': 'M', 'stuID': 1123, 'addr': 'beijing'}
>>> info3
{'age': 29, 'job': 'Sales', 'stuID': 1123, 'name': 'jacky', 'addr': 'beijing'}
>>> name_info['age'] = 80
>>> name_info
{'job': 'Sales', 'name': 'jacky', 'age': 80, 'Sex': 'M', 'stuID': 1123, 'addr': 'beijing'}
>>> info3
{'age': 29, 'job': 'Sales', 'stuID': 1123, 'name': 'jacky', 'addr': 'beijing'}
>>> info3['nationality'] = 'chinese'
>>> name_info
{'job': 'Sales', 'name': 'jacky', 'age': 80, 'Sex': 'M', 'stuID': 1123, 'addr': 'beijing'}
>>> info3
{'name': 'jacky', 'age': 29, 'job': 'Sales', 'nationality': 'chinese', 'stuID': 1123, 'addr': 'beijing'}
>>> name_info['ex_list'] = ['Coral','Erion']
>>> name_info
{'job': 'Sales', 'name': 'jacky', 'ex_list': ['Coral', 'Erion'], 'age': 80, 'Sex': 'M', 'stuID': 1123, 'addr': 'beijing'}
>>> info4 = name_info.copy()
>>> info4
{'addr': 'beijing', 'job': 'Sales', 'name': 'jacky', 'ex_list': ['Coral', 'Erion'], 'age': 80, 'stuID': 1123, 'Sex': 'M'}
这里来了一个问题,只管一层
>>> name_info['ex_list'] = ['Coral','Erion'] 这里是第二层
>>> name_info
{'job': 'Sales', 'name': 'jacky', 'ex_list': ['Coral', 'Erion'], 'age': 80, 'Sex': 'M', 'stuID': 1123, 'addr': 'beijing'}
>>> info4 = name_info.copy()
>>> info4
{'addr': 'beijing', 'job': 'Sales', 'name': 'jacky', 'ex_list': ['Coral', 'Erion'], 'age': 80, 'stuID': 1123, 'Sex': 'M'}
>>> name_info['addr'] = 'HongKong' 第一层修改ok,两边不一致了
>>> name_info
{'job': 'Sales', 'name': 'jacky', 'ex_list': ['Coral', 'Erion'], 'age': 80, 'Sex': 'M', 'stuID': 1123, 'addr': 'HongKong'}
>>> info4
{'addr': 'beijing', 'job': 'Sales', 'name': 'jacky', 'ex_list': ['Coral', 'Erion'], 'age': 80, 'stuID': 1123, 'Sex': 'M'}
>>> name_info['ex_list'].append('Wutenlan') 第二层依然一起修改
>>> info4
{'addr': 'beijing', 'job': 'Sales', 'name': 'jacky', 'ex_list': ['Coral', 'Erion', 'Wutenlan'], 'age': 80, 'stuID': 1123, 'Sex': 'M'}
>>> name_info
{'job': 'Sales', 'name': 'jacky', 'ex_list': ['Coral', 'Erion', 'Wutenlan'], 'age': 80, 'Sex': 'M', 'stuID': 1123, 'addr': 'HongKong'}
深复制(第二层也是复制,两份不同的指针)
import copy
copy.copy浅复制(复制一份)
deepcopy是深复制
>>> import copy
>>> info5 = copy.deepcopy(name_info)
>>> name_info
{'job': 'Sales', 'name': 'jacky', 'ex_list': ['Coral', 'Erion', 'Wutenlan'], 'age': 80, 'Sex': 'M', 'stuID': 1123, 'addr': 'HongKong'}
>>> name_info['ex_list'][2] = 'LongZeluola'
>>> name_info
{'job': 'Sales', 'name': 'jacky', 'ex_list': ['Coral', 'Erion', 'LongZeluola'], 'age': 80, 'Sex': 'M', 'stuID': 1123, 'addr': 'HongKong'}
>>> info5
{'name': 'jacky', 'ex_list': ['Coral', 'Erion', 'Wutenlan'], 'age': 80, 'Sex': 'M', 'job': 'Sales', 'stuID': 1123, 'addr': 'HongKong'}
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞2
添加新评论1 条评论
2018-12-20 10:16