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]]

posted @ 2020-06-07 16:15  sinlearn  阅读(136)  评论(0编辑  收藏  举报