fazerse 发表于 2020-10-30 06:11:29

字典部分课后题求助

题目是这样的,   如果你需要将字典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 = '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='four'   那么 为什么再打 a 的时候,{1: 'one', 2: 'two', 3: 'three', 4: 'four'}    把 4: 'four'也会显示出来。

就像我回答这道题时, 我 用   dict2=dict1
然后 我 加了行   dict1.clear(),   结果 再去打dict2   发现也变空字典了,   这我就不明白 其中的关联关系了。

heidern0612 发表于 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里面所有的变量名都对应一组数据,所有的值也都对应一组基于变量名引用的数据。

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

fazerse 发表于 2020-11-2 06:46:51

heidern0612 发表于 2020-10-30 07:51
这就跟列表那个解释是一样的。你第二行的答案已经告诉你了,只是把对象的引用拷贝过去而已。

简单的打个 ...

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

页: [1]
查看完整版本: 字典部分课后题求助