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是完全独立的。
python的深拷贝和浅拷贝
最新推荐文章于 2024-07-27 12:20:46 发布