|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在做课后作业52讲的题时遇到copy() 问题,和之前讲的copy() 后新变量的值不随之改变不同,故产生疑惑,问题出在哪?求解答
- #52讲的14题
- list1 = [1, 2]
- list2 = [3, 4]
- dict1 = {'1':list1, '2':list2}
- dict2 = dict1.copy()
- dict1['1'][0] = 5
- result = dict1['1'][0] + dict2['1'][0]
- print(result)
- #答案是 10,相当于dict2 的值和dict1 一样了
- #小甲鱼的《零基础入门学习Python》书76页4题,copy()函数
- a = {1:'one',2:'two',3:'three'}
- b = a.copy()
- id(a) #63239624
- id(b) #62239688,证明指向不同地址
- >>> a[1] = 'four'
- >>> a
- {1:'four',2:'two',3:'three'}
- >>> b
- {1:'one',2:'two',3:'three'}# b 的值没有改变
- #后来我就自己试了试字典键值为列表时,id copy()完是不变的
- >>> t1 = {'1': [1, 2], '2': [3, 4]}
- >>> t2 = t1.copy()
- >>> t2
- {'1': [1, 2], '2': [3, 4]}
- >>> t1['1'][0] = 0#修改t1 值
- >>> t1
- {'1': [0, 2], '2': [3, 4]}
- >>> t2
- {'1': [0, 2], '2': [3, 4]}#t2 的值随之改变
- >>> t2['1'][0] = 2#修改t2 值
- >>> t2
- {'1': [2, 2], '2': [3, 4]}
- >>> t1
- {'1': [2, 2], '2': [3, 4]}#t1 的值随之改变
- >>> id(t2['1'])
- 57000136
- >>> id(t1['1'])#相同id
- 57000136
- >>> id(t1)
- 57685064
- >>> id(t2)# t1 t2 却是不同id
- 57695176
- >>>
复制代码
copy并不是绝对的深拷贝,因为如果对象中还有列表之类的元素时,其没有对该元素的内部进行深拷贝,而是用另一个标签指向它
如果要实现绝对的深拷贝,请使用copy模块的deepcopy函数,该函数会对其内部所有元素(包含该元素内部成员)进行深拷贝
|
|