编程语言
首页 > 编程语言> > Python-深浅拷贝

Python-深浅拷贝

作者:互联网

一、数字和字符串

对于 数字 和 字符串 而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址

 

 

 

 

二、其他基本数据类型

对于字典、元祖、列表而言,进行赋值、浅拷贝和深拷贝时,其内存地址的变化是不同的。

 1.赋值。

赋值,只是创建一个变量,该变量指向原来内存地址,如:

 

 

 

 

2.浅拷贝

浅拷贝,在内存中只额外创建第一层数据。

import copy
n1 = {"x1":"Hello","x2":520,"x3":["World",999]}
n3 = copy.copy(n1)
print("n1的内存地址为:\n",id(n1))
print("浅拷贝后,n3是新的内存地址,在内存中只额外创建第一层数据:\n",id(n3))

 

 

print("n1的结果为:\n",n1)
print("n3的结果为:\n",n3)

 

 

n3['x1']='你好' # 修改第1层数据
print("n3的结果为:\n",n3) # n3第1次变化
print("n1的结果为:\n",n1) # 原数据n1不变

 

 

n3['x3'][0]='世界' # 修改第2层数据
print("n3的结果为:\n",n3) # n3第2次变化
print("n1的结果为:\n",n1) # 原数据变化!

 

 

 

 

 3.深拷贝。

深拷贝,在内存中将所有的数据重新创建一份(排除最后一层,即:python内部对字符串和数字的优化)

import copy
n1 = {"x1":"Hello","x2":520,"x3":["World",999]}
n4 = copy.deepcopy(n1)
print("n1的内存地址为:\n",id(n1))
print("浅拷贝后,n4是新的内存地址,在内存中将所有的数据重新创建一份(排除最后一层):\n",id(n4))

 

 

n4['x1']='你好' # 修改第1层数据
print("n4的结果为:\n",n4) # n4第1次变化
print("n1的结果为:\n",n1) # 原数据n1不变

 

 

 

n4['x3'][0]='世界' # 修改第2层数据
print("n4的结果为:\n",n4) # n4第2次变化
print("n1的结果为:\n",n1) # 原数据n1不变

 

 

 

 

 

 

标签:内存地址,Python,深浅,print,n1,拷贝,n3,n4
来源: https://www.cnblogs.com/henry06007/p/16062149.html