Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块。
1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。通俗点就是部分拷贝
2. copy.deepcopy 深拷贝 拷贝对象及其子对象,通俗点就是完全拷贝
1
a
=
[
"
1
"
,
"
2
"
,
"
3
"
,[
'
a
'
,
'
b
'
]]
2 b = a # 引用
3
4 c = copy.copy(a) # 浅拷贝
5
6 d = copy.deepcopy(a) # 深度拷贝
7
8 a.remove( " 1 " )
9 a[ 2 ].append( ' c ' )
10
11 print a
12 print b
13 print c
14 print c
15
16 运行结果:
17 [ ' 2 ' , ' 3 ' , [ ' a ' , ' b ' , ' c ' ]]
18 [ ' 2 ' , ' 3 ' , [ ' a ' , ' b ' , ' c ' ]]
19 [ ' 1 ' , ' 2 ' , ' 3 ' , [ ' a ' , ' b ' , ' c ' ]]
20 [ ' 1 ' , ' 2 ' , ' 3 ' , [ ' a ' , ' b ' ]]
2 b = a # 引用
3
4 c = copy.copy(a) # 浅拷贝
5
6 d = copy.deepcopy(a) # 深度拷贝
7
8 a.remove( " 1 " )
9 a[ 2 ].append( ' c ' )
10
11 print a
12 print b
13 print c
14 print c
15
16 运行结果:
17 [ ' 2 ' , ' 3 ' , [ ' a ' , ' b ' , ' c ' ]]
18 [ ' 2 ' , ' 3 ' , [ ' a ' , ' b ' , ' c ' ]]
19 [ ' 1 ' , ' 2 ' , ' 3 ' , [ ' a ' , ' b ' , ' c ' ]]
20 [ ' 1 ' , ' 2 ' , ' 3 ' , [ ' a ' , ' b ' ]]
我们可以看到,与c语言不同的是,=后不是两个不同的值,而是一个引用的值。要注意。。
出处:http://cnblogs.com/xiaoxia
我的淘宝:http://shop62115161.taobao.com/
本文遵从GNU 的自由文档许可证(Free Document License)的条款,欢迎转载、修改、散布。