鱼C论坛

 找回密码
 立即注册
查看: 1598|回复: 2

[已解决]关于copy()后的值的问题

[复制链接]
发表于 2017-10-8 11:36:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在做课后作业52讲的题时遇到copy() 问题,和之前讲的copy() 后新变量的值不随之改变不同,故产生疑惑,问题出在哪?求解答

  1. #52讲的14题
  2. list1 = [1, 2]
  3. list2 = [3, 4]

  4. dict1 = {'1':list1, '2':list2}
  5. dict2 = dict1.copy()

  6. dict1['1'][0] = 5

  7. result = dict1['1'][0] + dict2['1'][0]
  8. print(result)

  9. #答案是 10,相当于dict2 的值和dict1 一样了

  10. #小甲鱼的《零基础入门学习Python》书76页4题,copy()函数

  11. a = {1:'one',2:'two',3:'three'}
  12. b = a.copy()
  13. id(a) #63239624
  14. id(b) #62239688,证明指向不同地址

  15. >>> a[1] = 'four'
  16. >>> a
  17. {1:'four',2:'two',3:'three'}
  18. >>> b
  19. {1:'one',2:'two',3:'three'}# b 的值没有改变

  20. #后来我就自己试了试字典键值为列表时,id copy()完是不变的
  21. >>> t1 = {'1': [1, 2], '2': [3, 4]}
  22. >>> t2 = t1.copy()
  23. >>> t2
  24. {'1': [1, 2], '2': [3, 4]}

  25. >>> t1['1'][0] = 0#修改t1 值
  26. >>> t1
  27. {'1': [0, 2], '2': [3, 4]}
  28. >>> t2
  29. {'1': [0, 2], '2': [3, 4]}#t2 的值随之改变

  30. >>> t2['1'][0] = 2#修改t2 值
  31. >>> t2
  32. {'1': [2, 2], '2': [3, 4]}
  33. >>> t1
  34. {'1': [2, 2], '2': [3, 4]}#t1 的值随之改变
  35. >>> id(t2['1'])
  36. 57000136
  37. >>> id(t1['1'])#相同id
  38. 57000136
  39. >>> id(t1)
  40. 57685064
  41. >>> id(t2)# t1 t2 却是不同id
  42. 57695176
  43. >>>
复制代码
最佳答案
2017-10-8 13:50:18
copy并不是绝对的深拷贝,因为如果对象中还有列表之类的元素时,其没有对该元素的内部进行深拷贝,而是用另一个标签指向它
如果要实现绝对的深拷贝,请使用copy模块的deepcopy函数,该函数会对其内部所有元素(包含该元素内部成员)进行深拷贝
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-10-8 13:50:18 | 显示全部楼层    本楼为最佳答案   
copy并不是绝对的深拷贝,因为如果对象中还有列表之类的元素时,其没有对该元素的内部进行深拷贝,而是用另一个标签指向它
如果要实现绝对的深拷贝,请使用copy模块的deepcopy函数,该函数会对其内部所有元素(包含该元素内部成员)进行深拷贝
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-8 15:29:59 | 显示全部楼层
BngThea 发表于 2017-10-8 13:50
copy并不是绝对的深拷贝,因为如果对象中还有列表之类的元素时,其没有对该元素的内部进行深拷贝,而是用另 ...

奥奥,原来如此,多谢了!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-18 21:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表