ssg2006 发表于 2016-8-16 10:03:27

052作业第14题,copy的字典如何被替换了?

list1 =
list2 =

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

dict1['1'] = 5

result = dict1['1'] + dict2['1']
print(result)

答案是 10

没看明白原因。

>>> dict1 = {1:2,3:4}
>>> dict2 = {5:6,7:8}
>>> dict1
{1: 2, 3: 4}
>>> dict2
{5: 6, 7: 8}
>>> dict3 = dict2
>>> dict4 = dict2.copy()
>>> dict3
{5: 6, 7: 8}
>>> dict4
{5: 6, 7: 8}
>>> dict2 = 60
>>> dict2
{5: 60, 7: 8}
>>> dict3
{5: 60, 7: 8}
>>> dict4
{5: 6, 7: 8}py()

上面这个例子和题目有设么区别呢?

SixPy 发表于 2016-8-16 10:14:58

type(dict1['1'] )

type(dict2 )

比较一下异同~

玄天宗 发表于 2016-8-16 10:47:46

list1 =
list2 =

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

dict1['1'] = 5

result = dict1['1'] + dict2['1']
print(result)

因为dict1['1']表示字典dict1里面key值为‘1’的值,即list1,而dict1['1']就表示list1的第0个元素,即1.当dict1['1'] = 5表示将列表list1中的1更新为5(list1=).dict2是复制的dict1,所以dict2['1']=5,故result=5+5=10(不知道这么理解对不?)

玄天宗 发表于 2016-8-16 11:13:04

本帖最后由 玄天宗 于 2016-8-16 11:23 编辑

>>> dict1 = {1:2,3:4}
>>> dict2 = {5:6,7:8}
>>> dict1
{1: 2, 3: 4}
>>> dict2
{5: 6, 7: 8}
>>> dict3 = dict2
>>> dict4 = dict2.copy()
>>> dict3
{5: 6, 7: 8}
>>> dict4
{5: 6, 7: 8}
>>> dict2 = 60
>>> dict2
{5: 60, 7: 8}
>>> dict3
{5: 60, 7: 8}
>>> dict4
{5: 6, 7: 8}py()

这个问题你要是看了视频因该就明白了、、、(用小甲鱼视频里说的python里面没有变量只有标签,不知道是不是这么说的{:10_250:})
dict2和dict3是将dict2、dict3这两个变量名指向同一字典,而dict4是复制dict2(因该是在内存中重新存了一个字典)所以当dict2=60时dict2和dict3的值都发生改变而dict4没有变
(可惜不知道怎么上图片)

===两个的区别因该是第一个copy的是一个变量(两个list的值)而第二个copy的就是值
(相互学习,不知道我理解对不??)

ssg2006 发表于 2016-8-16 13:19:16

玄天宗 发表于 2016-8-16 11:13
>>> dict1 = {1:2,3:4}
>>> dict2 = {5:6,7:8}
>>> dict1


同样都是copy() 操作

为什么第一个例子中 dict2 随着 dict1 改变了

第二个例子中 dict4 没有随着 dict2 改变呢?

玄天宗 发表于 2016-8-16 14:35:44

ssg2006 发表于 2016-8-16 13:19
同样都是copy() 操作

为什么第一个例子中 dict2 随着 dict1 改变了


第一个列子你用dict1.setdefault('b',2)这个试试,可以在dict1中加入一个值,dict1={'2': , '1': , 'b': 2}
你再看dict2的值并没有变、、、、、你对比一下他们有什么不同,因该能明白了、、、

ssg2006 发表于 2016-8-16 14:50:42

>>> list1 =
>>> list2 =
>>> dict1 = {'1':list1, '2':list2}
>>> dict2 = dict1.copy()
>>> dict1
{'2': , '1': }
>>> dict2
{'2': , '1': }
>>> dict1.setdefault('b',2)
2
>>> dict1
{'2': , '1': , 'b': 2}
>>> dict2
{'2': , '1': }
>>> dict1['1'] = 5
>>> dict1
{'2': , '1': , 'b': 2}
>>> dict2
{'2': , '1': }
>>> list1

>>> list2

>>> dict1['1']


不知何时直接把 list1 改写了,用 dict1['1'] 可以做到的样子。

玄天宗 发表于 2016-8-16 15:18:34

ssg2006 发表于 2016-8-16 14:50
不知何时直接把 list1 改写了,用 dict1['1'] 可以做到的样子。

就是这个dict1['1'] = 5 将list1的第一项改成了5(dict1['1'] 分解开就是dict1中key值为‘1’的项,即list1而表示list1的第一项,本来是1,通过dict1['1'] = 5就变成5了)
我也是才自学了一部分估计讲得不清楚、、、、

yyongl 发表于 2016-8-17 18:02:14

dict1['1']
意思是指list1 =
dict1['1']=5
是指list1 =

happy_ltq 发表于 2016-8-22 16:05:21

{:10_249:}{:10_249:}{:10_249:}

薇薇 发表于 2016-10-8 22:17:58

度娘和看视频都可以解决

我都还没出力 发表于 2020-4-27 00:02:53

最近刚学到这...
list1 =
list2 =
dict1 = {'1':list1, '2':list2}
dict2 = dict1.copy()            #注意⚠这里虽然是浅拷贝,但是list1是变量,相当于x,变量发生变化,对应的dict1,2,3都会变
dict3=dict1
dict1['1'] = 5
print(dict1,dict2,dict3)
result = dict1['1'] + dict2['1']
print(result)
print('========================================================')

import copy
list1 =
list2 =
dict1 = {'1':list1, '2':list2}
dict2 = copy.deepcopy(dict1)    #这里是深拷贝,相当于dict2={'1':[1,2, '2':[3,4},已经突破了变量的束缚(固定了)
dict1['1'] = 5
result = dict1['1'] + dict2['1']
print(result)
页: [1]
查看完整版本: 052作业第14题,copy的字典如何被替换了?