文章目录
- 【Python】第十三部分 类的浅拷贝和深拷贝
- 13. 类的浅拷贝和深拷贝
-
- 13.1 变量的赋值 *** 作
- 13.2 浅拷贝
- 13.3 深拷贝
- 总结
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))
总结
以上就是今天要讲的内容,希望对大家有所帮助!!!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)