码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-06-07 16:26:26      阅读:50      评论:0      收藏:0      [点我收藏+]

标签:复制   切片   code   pytho   不同的   方法   拷贝   不能   print   

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

复制

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 零散知识点(复制、浅拷贝、深拷贝)

标签:复制   切片   code   pytho   不同的   方法   拷贝   不能   print   

原文地址:https://www.cnblogs.com/sinlearn/p/13060936.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!