Python中的赋值、浅拷贝、深拷贝的区别和联系
程序员文章站
2022-05-19 15:29:19
...
# 1、赋值(注意空赋值改变地址指向) 2、浅拷贝 3、深拷贝
#直接赋值(除了用空去赋值) : x、y指向同一个地址空间的值,所以后面对x还是y进行修改x、y两者都会变
x = {}
y = x # x为原件 y为附件
x['value'] = 24
y['value'] = 26
x['value'] = 25
print(id(x),id(y))
#直接赋值(用空去赋值) : 一开始x、y指向同一个地址空间的值 但是对x或者y进行了空字典赋值后 x、y两者不指向同一个地址空间了
x = {}
y = x
x['value'] = 24
y['value'] = 26
x['value'] = 25
y = {} #对y进行赋值 y指向的地址空间变了 已经与x不一样了
y.clear()
print(x,y)
#浅拷贝: 浅拷贝之所以称为浅拷贝,是它仅仅只拷贝了一层 当在列表里面嵌套列表 或者 字典里面嵌套字典 第二层甚至第三层里面的内容不会重新分配空间 对其一进行修改 会改变另一者
# 比如对上述list_a,
# 1、切片操作:list_b = list_a[:] 或者 list_b = [each for each in list_a] 其中切片操作 对于数组切片赋值后 (如a是数组 b = a[:]) b和a还是指向同一地址空间
# 2、工厂函数:list_b = list(list_a)
# 3、copy函数:list_b = copy.copy(list_a)
#深拷贝 只有copy中的deepcopy模块
import copy
x1 = [1,1,2,3,5]
sd = copy.deepcopy(x1)
sd
#关于拷贝的警告
# 1、对于非容器类型,如数字,字符,以及其它“原子”类型,没有拷贝一说。产生的都是原对象的引用
# 2、如果元组变量值包含原子类型对象,即使采用了深拷贝,也只能得到浅拷贝
上一篇: PHP实现今天是星期几的几种写法
下一篇: 微信分享问题