今天在用python刷leetcode 3Sum problem时,调入到了一个大坑中,检查半天并没有任何逻辑错误,但输出结果却总是不对,最终通过调试发现原来python中list和dict类型直接赋值竟然是浅拷贝!!!因此,在实际实验中,若要实现深拷贝,建立新list或dict,使新建的list或dict变量和以前的变量只是具有相同的值,但是却具有不同的存储地址,保证在改变以前的list变量的时候,不会对新的list产生任何影响。
python中的深拷贝的实现需要通过copy.deepcopy函数来实现。
具体操作如下:
1
2
|
# python >>> from copy import deepcopy |
- 关于dict的深浅拷贝实验示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
>>> a[ 'e1' ] = 1 #添加字典元素 >>> a[ 'e2' ] = 2 >>> a #查看字典内容,输出如下 { 'e1' : 1 , 'e2' : 2 } >>> b = a #浅拷贝 >>> c = deepcopy(a) #深拷贝 >>> a[ 'e1' ] = 3 #改变字典的内容,观察深浅拷贝变量的变化 >>> a { 'e1' : 3 , 'e2' : 2 } >>> b { 'e1' : 3 , 'e2' : 2 } >>> c { 'e1' : 1 , 'e2' : 2 } |
- 关于list的深浅拷贝实验示例
1
2
3
4
5
6
7
8
9
10
11
|
>>> a = [ 1 , 2 , 2 , 3 ] >>> b = deepcopy(a) >>> c = a >>> a [ 1 , 2 , 3 ] >>> b [ 1 , 2 , 2 , 3 ] >>> c [ 1 , 2 , 3 ] |
以上这篇浅谈Python 列表字典赋值的陷阱就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/EricaApple/article/details/60970610