python 零散知识点(复制浅拷贝深拷贝)

Posted 青梅换了酒钱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 零散知识点(复制浅拷贝深拷贝)相关的知识,希望对你有一定的参考价值。

要搞懂这三个概念,将下面三个程序自己测试一遍就行。

复制

a = 1
b = a
print(id(a), id(b))
print(a,b)

140716855894416 140716855894416
1 1

浅拷贝

#只拷贝一层
jack = ["jack",[‘age‘,20]]
tom = jack[:]    # 切片
nick = list(jack) # 工厂方法
print(jack,tom,nick) # 内容相同
print(id(jack), id(tom),id(nick)) #指向不同的ID了
# 年龄是一个嵌套列表,在第二层 
# 假如只修改tom的年龄为18
tom[0] = "tom"
nick[0] = "nick" # 第一层单独变化
tom[1][1] = 18
print(jack,tom,nick)                       # 结果三个的年龄都变了,
print(id(jack[1]), id(tom[1]),id(nick[1])) # 第二层,ID值相同,说明浅拷贝,存在嵌套的情况,是不能单独修改各自的值得

[‘jack‘, [‘age‘, 20]] [‘jack‘, [‘age‘, 20]] [‘jack‘, [‘age‘, 20]]
2105435611848 2105436845192 2105469646856
[‘jack‘, [‘age‘, 18]] [‘tom‘, [‘age‘, 18]] [‘nick‘, [‘age‘, 18]]
2105435527176 2105435527176 2105435527176

深拷贝

#  拷贝了对象的所有元素
import copy
jack = ["jack",[‘age‘,20]]
tom  =  copy.deepcopy(jack)
nick  = copy.deepcopy(jack)
tom[0] = "tom"
nick[0] = "nick"    # 第一层单独变化
tom[1][1] = 18      # 第二层也单独变化
print(jack,tom ,nick )  

[‘jack‘, [‘age‘, 20]] [‘tom‘, [‘age‘, 18]] [‘nick‘, [‘age‘, 20]]





以上是关于python 零散知识点(复制浅拷贝深拷贝)的主要内容,如果未能解决你的问题,请参考以下文章

python之copy模块与深拷贝浅拷贝

IOS 深拷贝和浅拷贝

python的复制,深拷贝和浅拷贝的区别

Python深复制浅复制or深拷贝浅拷贝

Python中list的复制及深拷贝与浅拷贝探究

iOS深复制和浅复制