python深拷贝浅拷贝相关问题
- 数字在[-5,257)之间
a=1
b=1
print(a is b)#True指向地址相同
print(a==b)#Ture值相同
- 列表
a=[1,2,3]
b=a#指向相同的地址即为浅拷贝
b[0]=4
print(a,b)#输出都为[4,2,3]
- 深拷贝
import copy
a=[1,2,3]
b=copy.deepcopy(a)#指向不同地址值相同
b[0]=4
print(a,b)#a未被修改
- 列表中的深拷贝与浅拷贝(元组也是一样)
import copy
a=[1,2,3]
b=[4,5,6]
c=[a,b]
d=c
e=copy.deepcopy(c)
a[0]=0
print(d)#[[0,2,3],[4,5,6]]
print(e)#[[1,2,3],[4,5,6]]
- copy与deepcopy的区别
import copy
a=[1,2,3]
b=[4,5,6]
c=[a,b]
d=c
e=copy.copy(c)
a[0]=0
print(d)#[[0,2,3],[4,5,6]]
print(e)#[[0,2,3],[4,5,6]]
c.append('c')
print(d)#[[0,2,3],[4,5,6],'c']
print(e)#[[0,2,3],[4,5,6]]
copy只拷贝一层的引用
- 元组使用copy相当于“=”
因为元组是不可变类型,可变类型使用copy会拷贝一层引用
import copy
a=[1,2,3]
b=[4,5,6]
c=(a,b)
d=c
e=copy.copy(c)
a[0]=0
print(d)#([0,2,3],[4,5,6])
print(e)#([0,2,3],[4,5,6])
print(id(d))
print(id(e))#地址相同