38讲习题1和2
1>>> d = {"小甲鱼":"千年王八,万年龟。"}>>> e = d.copy()
>>> d["小甲鱼"] = "666"
求e变量
2>>> d = {"小甲鱼":{"数学":99, "英语":88, "语文":101}}
>>> e = d.copy()
>>> d["小甲鱼"]["语文"] = 100
求e变量
为什么习题1的变量没有变化,而习题2的e变量值发生了变化了呢 copy() 是浅拷贝,它只是复制了最外层的值,里层的引用还是不变,
所以 d 跟 e 的 '小甲鱼' 的值还是使用了同一个字典,因为字典是可变对象,
所以修改 d 的里层字典会影响到 e 的 isdkz 发表于 2022-4-29 11:10
copy() 是浅拷贝,它只是复制了最外层的值,里层的引用还是不变,
所以 d 跟 e 的 '小甲鱼' 的值还是使 ...
习题1里面的e变量没有变啊
看看这篇文章是否对有所帮助:
https://fishc.com.cn/forum.php?mod=redirect&goto=findpost&ptid=172817&pid=4777529
舍侠 发表于 2022-4-29 11:11
习题1里面的e变量没有变啊
因为习题 1 使用的是字符串呀,字符串是不可变对象,
而且你是直接对 '小甲鱼' 这个键赋值,
d["小甲鱼"] 和 d["小甲鱼"]["语文"] 一个一层一个两层能一样吗?
isdkz 发表于 2022-4-29 11:14
因为习题 1 使用的是字符串呀,字符串是不可变对象,
而且你是直接对 '小甲鱼' 这个键赋值,
一层不变,二层可以变?? 舍侠 发表于 2022-4-29 11:29
一层不变,二层可以变??
不是,因为 copy 是只复制了一层,而它第二层是可变对象的话,所有指向它的引用都是会跟着变的
你使用 深拷贝的话就不会出现这种问题:
>>> from copy import deepcopy
>>> d = {"小甲鱼":{"数学":99, "英语":88, "语文":101}}
>>> e = deepcopy(d)
>>> d["小甲鱼"]["语文"] = 100
>>> d
{'小甲鱼': {'数学': 99, '英语': 88, '语文': 100}}
>>> e
{'小甲鱼': {'数学': 99, '英语': 88, '语文': 101}}
>>>
isdkz 发表于 2022-4-29 11:32
不是,因为 copy 是只复制了一层,而它第二层是可变对象的话,所有指向它的引用都是会跟着变的
你使用 ...
刚学了就忘,唉,这个编程太难了 舍侠 发表于 2022-4-29 11:47
刚学了就忘,唉,这个编程太难了
慢慢来嘛{:5_108:}
页:
[1]