将字典作为值添加进另一个字典中,没有明显的修改,为什么ta会变
本帖最后由 画个圈圈XZQ 于 2021-3-24 20:47 编辑dict1 = {}
dict2 = {}
a = 0
b = 2
c = "A"
while b:
dict1 = input("输入dict的值:")
dict2 = dict1
print(dict2,dict1)
a = 1
c = "B"
b -= 1
运行结果如下:
输入dict1的值:a
{'A': {0: 'a'}} {0: 'a'}
输入dict1的值:b
{'A': {0: 'a', 1: 'b'}, 'B': {0: 'a', 1: 'b'}} {0: 'a', 1: 'b'}
第一次循环字典dict4中的键"A"的值为{0 : "a"},第二次循环后键"A"的值又变成了{0 :"a" , 1 : "b"},
将dict1换成列表的形式也是一样,试了下把 dict1 = {} 放在循环初始位置键"A"的值就不会变。
为什么像上面那样ta的值会变成下一次循环键的值 本帖最后由 代码小白liu 于 2021-3-24 21:29 编辑
while 2 输入dict1的值:a 这时候就按照循环要求,第一次打印dict2{},dict1{},因为原始都是空,所以dcit1{0:“a”},dict2{"A":dict1{}},也就是{'A': {0: 'a'}},【注意此时print下边的还未运行
然后继续循环,此时 a = 1 c = "B"b -= 1正常运行 判断while 1 ,然后输入输入 dict1的值:b 也就是{1:"b"} 加入到上次一的dict1中,就是{0: 'a', 1: 'b'},然后再看dict2,就是{"B":dict1}一次循环时dict2 已经等于{'A': {0: 'a'}},所以此时应该等于,{{"A":dict1}{"B":dict1}} 也就是{'A': {0: 'a', 1: 'b'}, 'B': {0: 'a', 1: 'b'}} 然后 dict2 ={'A': {0: 'a', 1: 'b'}, 'B': {0: 'a', 1: 'b'}} dict1 = {0: 'a', 1: 'b'}
就是最终的结果 dict1 = {} 放在循环初始位置的话,每次循环dict1 都会为空啊 你放在外边, 第二次循环的时候,此时dict1 已经有值了不是空 代码小白liu 发表于 2021-3-24 21:28
while 2 输入dict1的值:a 这时候就按照循环要求,第一次打印dict2{},dict1{},因为原始都是空, ...
第五行我的理解是dict2{ "A":{0:"a"} , "B":dict1{} },我觉得第一次循环时 dict1 的值 {0:"a"} 已经给了键 "A" ,
下一次循环键 "A" 的值不应该随着 dict1 的值而改变,,,,走进误区了.
本帖最后由 画个圈圈XZQ 于 2021-3-25 09:52 编辑
在循环末尾加了 dict1.clear() 用来清空 dict1 ,清空后键 "A"的值也跟着变成了 { } ,应该是只是单纯的修改 dict1 的值,那么ta之前作为键 "A" 的值也会变成修改后的值,
如果是将 dict1 这个标签重新贴向值 { } ,那么ta之前的值 {0:"a"} 作为键 "A" 的值就不会变.
画个圈圈XZQ 发表于 2021-3-25 09:28
在循环末尾加了 dict1.clear() 用来清空 dict1 ,清空后键 "A"的值也跟着变成了 { } ,应该是只是单纯的修 ...
有用的话来个最佳答案? 代码小白liu 发表于 2021-3-25 15:00
有用的话来个最佳答案?
老哥,不好意思哈,最近没怎么看帖子
页:
[1]