python中浅拷贝是对一个对象最顶层的拷贝。 浅拷贝对可变数据类型会拷贝这个对象的引用;对于不可变数据类型进行对象资源的拷贝,即只拷贝对象的数据内容和父对象,不拷贝对象内部的子对象。
在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用。
浅拷贝(copy):
浅拷贝是对一个对象最顶层的拷贝,拷贝引用。 浅拷贝对可变类型会进行浅拷贝(拷贝一个对象的引用)。
对于不可变数据类型进行对象资源的拷贝,只拷贝对象的数据内容。拷贝父对象,不拷贝对象内部的子对象。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 | >>> import copy
>>> c= copy . copy (alist)
>>> print alist; print c
[1, 2, 3, [ 'a' , 'b' ]]
[1, 2, 3, [ 'a' , 'b' ]]
>>> alist.append(5)
>>> print alist; print c
[1, 2, 3, [ 'a' , 'b' ], 5]
[1, 2, 3, [ 'a' , 'b' ]]
>>> alist[3][ 'a' , 'b' ]
>>> alist[3].append( 'cccc' )
>>> print alist; print c
[1, 2, 3, [ 'a' , 'b' , 'cccc' ], 5]
[1, 2, 3, [ 'a' , 'b' , 'cccc' ]] 里面的子对象被改变了
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | print ( "浅拷贝:" )
import copy
b=[1,2,3,4,5]
print ( "id b:" ,id(b))
h= copy . copy (b)
print ( "id h" ,id(h))
print (h)
h.append(6)
print (h)
print ( "id h" ,id(h))
print (b) #浅拷贝新的列表h改变了,原来的b没变。
b[1]= 'n' #列表元素改变后,新的列表也没变
print (h)
输出:
浅拷贝:
( 'id b:' , 140165805110552)
( 'id h' , 140165805110480)
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 6]
( 'id h' , 140165805110480)
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 6]
|
推荐课程:Python入门与进阶教学视频(极客学院)