Python教程

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-深浅拷贝的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!