|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 jincongno.1 于 2019-10-5 17:43 编辑
- list1 = [1, 2]
- list2 = [3, 4]
- dict1 = {'1':list1, '2':list2}
- dict2 = dict1.copy()
- dict1['1'][0] = 5
- result = dict1['1'][0] + dict2['1'][0]
- print(result)
复制代码
我看之前书上的例子 b 并没有跟着a变化 (例子见下图) 这里为什么dict2怎么也跟着变化了
望大佬指点
copy() 方法用于返回一个具有相同键值对的新字典,例如:
- a = {'one': 1, 'two': 2, 'three': [1,2,3]}
- b = a.copy()
- print(b)
复制代码
运行结果为:
- {'one': 1, 'two': 2, 'three': [1, 2, 3]}
复制代码
可以看到,通过 copy() 方法,就可以将字典 a 的数据拷贝给字典 b。
注意,copy() 方法所遵循的拷贝原理,既有深拷贝,也有浅拷贝。拿拷贝字典 a 为例,copy() 方法只会对最表层的键值对进行深拷贝,也就是说,它会再申请一块内存用来存放 {'one': 1, 'two': 2, 'three': []};而对于某些列表类型的值来说,此方法对其做的是浅拷贝,也就是说,b 中的 [1,2,3] 的值不是自己独有,而是和 a 共有。
例如:
- a = {'one': 1, 'two': 2, 'three': [1,2,3]}
- b = a.copy()
- #向 a 中添加新键值对,由于b已经提前将 a 所有键值对都深拷贝过来,因此 a 添加新键值对,不会影响 b。
- a['four']=100
- print(a)
- print(b)
- #由于 b 和 a 共享[1,2,3](浅拷贝),因此移除 a 中列表中的元素,也会影响 b。
- a['three'].remove(1)
- print(a)
- print(b)
复制代码
运行结果为:
- {'one': 1, 'two': 2, 'three': [1, 2, 3], 'four': 100}
- {'one': 1, 'two': 2, 'three': [1, 2, 3]}
- {'one': 1, 'two': 2, 'three': [2, 3], 'four': 100}
- {'one': 1, 'two': 2, 'three': [2, 3]}
复制代码
来自 http://c.biancheng.net/view/4385.html
|
-
|