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 零散知识点(复制浅拷贝深拷贝)的主要内容,如果未能解决你的问题,请参考以下文章