【Python】第十三部分 类的浅拷贝和深拷贝
13. 类的浅拷贝和深拷贝
13.1 变量的赋值操作
# 变量的赋值操作
# 只是形成一个新的变量,实际上指向的还是同一个对象
class Person:
pass
person = Person()
person1 = person
# 指向的都是同一个地址
print(id(person)) # 2769139079656
print(id(person1)) # 2769139079656
13.2 浅拷贝
"""
Person拷贝一般都是浅拷贝,拷贝的时候,源对象包含的子对象内容
不进行拷贝,因此源对象与拷贝的对象都会引用同一个子对象(相同的地址)
"""
class Compute:
def __init__(self, cpu, disk):
self.cpu = cpu
self.disk = disk
class Cpu:
pass
class Disk:
pass
import copy
cpu = Cpu()
disk = Disk()
compute1 = Compute(cpu, disk)
compute2 = copy.copy(compute1)
# 3053644488544 3053644488320 3053644488376
print(id(compute1), id(compute1.cpu), id(compute1.disk))
# 3053644528216 3053644488320 3053644488376
print(id(compute2), id(compute2.cpu), id(compute2.disk))
13.3 深拷贝
"""
使用copy模块中的deepcopy函数,递归拷贝源对象中包含的子对象,
源对象和拷贝对象所有的子对象地址都不同
"""
class Phone:
def __init__(self, card, line):
self.card = card
self.line = line
class Card:
pass
class Line:
pass
line = Line()
card = Card()
phone1 = Phone(card, line)
phone2 = copy.deepcopy(phone1)
# 2070089480680 2070089479168 2070089479112
print(id(phone1), id(phone1.card), id(phone1.line))
# 2070089480960 2070089481128 2070089481240
print(id(phone2), id(phone2.card), id(phone2.line))
总结
以上就是今天要讲的内容,希望对大家有所帮助!!!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/82888.html