深拷贝与浅拷贝


# ################ 第一种 #########################

# '''==与is
# ==:判断值是否相等
# is:判断内存地址是否相同
# # pycharm 解释器 作了优化所以看不出
# '''
# 小整数对象:[-5,256]
# 预置在内存中的数据,引用小整数的变量的地址都是一样的,说明引用的是同一片地址
# '''
#
# # 前提是 列表中要有嵌套【至少2层列表】
# # 其他语言 java c++ ;【0,1,2,3,4,5,【6,7,8】】浅拷贝是只拷贝值 不开辟新的内存地址,也就是说:拷贝的新列表,内部元素的值还是指向原来列表元素值的值。
深拷贝才开辟新的内存地址,python中 深浅拷贝 都 开辟 新的内存地址

其他语言 浅拷贝
其他语言 深拷贝

 
# python中
# #浅拷贝   值一样  地址不一样,在内存中重新开辟了一个空间,生成新的内存空间,再赋值
# # 只拷贝了元素的引用,

比如:一个二维列表 list=【1,2,3,4,【5,6,7】】
内存分析:变量被创建,是一个列表,在内存中开辟了一个内存空间,列表list有一个总地址,无论内部元素怎么变,总地址都不会变。
列表内的内部元素,其实存放的内存地址即:值的所对应的内存地址。内存地址指向值,值对应内存地址。

浅拷贝

深拷贝

# ################ 第二种#########################
# 浅拷贝:只拷贝第一层。
# 深拷贝:拷贝嵌套层次中的所有可变类型。
# ------ 特殊情况 tuple string


前提:浅拷贝只拷贝第一层,深拷贝内外层都拷贝
可变类型,深浅拷贝都一样,内存地址都一样,都指向相同的数值
不可变类型,深浅拷贝都一样,都开辟新的内存空间,地址不一样


原文地址:https://www.cnblogs.com/yx12138/p/10655782.html