python的深拷贝和浅拷贝


import copy
class Birthday:
    def __init__(self, year, month, day):
        self.year = year
        self.month = month
        self.day = day
class Person:
    def __init__(self, name, birthday):
        self.name = name
        self.birthday = birthday


birth_1 = Birthday(2000, 5, 12)
p_1 = Person("李四", birth_1)  # 创建对象
birth_2 = Birthday(2000, 5, 12) 
p_2 = Person("李四", birth_2)  # 创建对象 
p_3 = p_1  # 简单复制,引用相同
p_4 = copy.copy(p_1)  # 浅拷贝,引用不同
p_5 = copy.deepcopy(p_1)  # 深拷贝,引用不同
print(id(birth_1))
print(id(birth_2))
print(id(p_1))
print(id(p_3))
print(p_1==p_3) #赋值符号“=”使得两个对象引用相同,此时一个对象的变化也会影响另一对象
print(p_1==p_4)
print(p_4.name)
print("-------------------------")
print(p_1.birthday == p_2.birthday)
print(p_1.birthday == p_4.birthday)
print(p_1.birthday == p_5.birthday)
print(p_1.birthday == p_3.birthday) 

print(p_1.birthday.year)
print(p_5.birthday.year)

p_1.birthday.year=2020
# p_1中的对象变化,p_4也会对应变化
print(p_4.birthday.year) #copy函数是浅拷贝,只拷贝当前对象,不会拷贝对象内部的其他对象
# p_1中的对象变化,p_5不也会对应变化
print(p_5.birthday.year)#如 b = copy.deepcopy(a),此时,b 完全拷贝了 a 对象及其子对象,a 和 b是完全独立的。


在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值