python:
①复制方法.copy
——浅拷贝,只是复制数据,指针(内存地址)是改变的
②赋值 =
——深拷贝,即地址是绑定在一起的
# 浅拷贝和深拷贝
a = {1:'one',2:'two',3:'three'}
b = a.copy()
c = a
print(a,b,c)
c= {} #!!!!!!!!!!!!!!!!
print(a,b,c)
输出:
{1: ‘one’, 2: ‘two’, 3: ‘three’} {1: ‘one’, 2: ‘two’, 3: ‘three’} {1: ‘one’, 2: ‘two’, 3: ‘three’}
{1: ‘one’, 2: ‘two’, 3: ‘three’} {1: ‘one’, 2: ‘two’, 3: ‘three’} {}
# 浅拷贝和深拷贝
a = {1:'one',2:'two',3:'three'}
b = a.copy()
c = a
print(a,b,c)
c[4]= 'four'# !!!!!!!!!!!!!!!!!!!!!!!
print(a,b,c)
输出:
{1: ‘one’, 2: ‘two’, 3: ‘three’} {1: ‘one’, 2: ‘two’, 3: ‘three’} {1: ‘one’, 2: ‘two’, 3: ‘three’}
{1: ‘one’, 2: ‘two’, 3: ‘three’, 4: ‘four’} {1: ‘one’, 2: ‘two’, 3: ‘three’} {1: ‘one’, 2: ‘two’, 3: ‘three’, 4: ‘four’}
第一个程序对c做更改时,a并没有改变;但是当对c里面的元素修改时,a也跟着改变了
接着用序列来试试:
a = [1,2,3]
b = a.copy()
c = a
print(a,b,c)
c=[]
print(a,b,c)
输出:
[1, 2, 3] [1, 2, 3] [1, 2, 3]
[1, 2, 3] [1, 2, 3] []
# 浅拷贝和深拷贝
a = [1,2,3]
b = a.copy()
c = a
print(a,b,c)
c.append(4)
print(a,b,c)
输出:
[1, 2, 3] [1, 2, 3] [1, 2, 3]
[1, 2, 3, 4] [1, 2, 3] [1, 2, 3, 4]
浅拷贝(复制):与源相互独立,不会互相影响
深拷贝(赋值):增加了一个新标签,指向相同的内存空间