今天在用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