鱼C论坛

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

[已解决]字典部分课后题求助

[复制链接]
发表于 2020-10-30 06:11:29 | 显示全部楼层 |阅读模式

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

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

x
题目是这样的,   如果你需要将字典dict1 = {1: 'one', 2: 'two', 3: 'three'}拷贝到dict2,你应该怎么做?

答:可以利用字典的copy()方法:dict2 = dict1.copy(),在其他语言转移到Python小伙伴们刚开始可能会习惯性的直接用赋值的方法(dict2 = dict1),这样子做在Python中只是将对象的引用拷贝过去而已。

看以下区别:

    >>> a = {1:'one', 2:'two', 3:'three'}
    >>> b = a.copy()
    >>> c = a
    >>> c[4] = 'four'
    >>> c
    {1: 'one', 2: 'two', 3: 'three', 4: 'four'}
    >>> a
    {1: 'one', 2: 'two', 3: 'three', 4: 'four'}
    >>> b
    {1: 'one', 2: 'two', 3: 'three'}


我的问题是 c=a  之后 ,    添加了  c[4]='four'     那么 为什么  再打 a 的时候,  {1: 'one', 2: 'two', 3: 'three', 4: 'four'}    把 4: 'four'  也会显示出来。

就像我回答这道题时, 我 用   dict2=dict1
然后 我 加了行   dict1.clear(),     结果 再去打  dict2   发现也变空字典了,   这我就不明白 其中的关联关系了。
最佳答案
2020-10-30 07:51:29
这就跟列表那个解释是一样的。你第二行的答案已经告诉你了,只是把对象的引用拷贝过去而已。

简单的打个比方,你的a和b变量只是相当于一个门牌号。

a门牌里面对应的是{1:'one', 2:'two', 3:'three'},这一个住户。

当你b=a的copy时候,你就又给这个住户帖了另外一个门牌,但是还是指向的这个用户。

同理,c也是指向的这个用户。

当你任意修改一个(a or b or c)值的时候,修改的是里面的用户,那自然所有指向这个用户的门牌号都跟着变了。


python里面所有的变量名都对应一组数据,所有的值也都对应一组基于变量名引用的数据。

当前有三个变量名都引用同一个地址,修改地址内容了,所有变量名对应的内容也就都发生了改变。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-30 07:51:29 | 显示全部楼层    本楼为最佳答案   
这就跟列表那个解释是一样的。你第二行的答案已经告诉你了,只是把对象的引用拷贝过去而已。

简单的打个比方,你的a和b变量只是相当于一个门牌号。

a门牌里面对应的是{1:'one', 2:'two', 3:'three'},这一个住户。

当你b=a的copy时候,你就又给这个住户帖了另外一个门牌,但是还是指向的这个用户。

同理,c也是指向的这个用户。

当你任意修改一个(a or b or c)值的时候,修改的是里面的用户,那自然所有指向这个用户的门牌号都跟着变了。


python里面所有的变量名都对应一组数据,所有的值也都对应一组基于变量名引用的数据。

当前有三个变量名都引用同一个地址,修改地址内容了,所有变量名对应的内容也就都发生了改变。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-2 06:46:51 | 显示全部楼层
heidern0612 发表于 2020-10-30 07:51
这就跟列表那个解释是一样的。你第二行的答案已经告诉你了,只是把对象的引用拷贝过去而已。

简单的打个 ...

第12讲又温了一遍,  贴标签, 跟  分片拷贝区别, 直接上图   多谢

版权属于小甲鱼

版权属于小甲鱼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-10 21:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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