Python类:复制对象(不导入副本的深度复制)
我想构建一个方法,创建具有不同内存地址的对象的完全独立副本(深度副本)。这样旧对象的值就不会受到新对象的值更改的影响 我不想使用“importcopy”,而是想通过在类中定义一个新方法来手动完成 比如说,我一直在构建一个名为“student”的新类,并创建了一个对象“eden”Python类:复制对象(不导入副本的深度复制),python,python-3.x,class,Python,Python 3.x,Class,我想构建一个方法,创建具有不同内存地址的对象的完全独立副本(深度副本)。这样旧对象的值就不会受到新对象的值更改的影响 我不想使用“importcopy”,而是想通过在类中定义一个新方法来手动完成 比如说,我一直在构建一个名为“student”的新类,并创建了一个对象“eden” class student: def __init__(self, name, year, number): self.name = name self.year = year
class student:
def __init__(self, name, year, number):
self.name = name
self.year = year
self.number = number
self.grades = []
def new_num(self, number):
self.number = number
def update_grades(self, grades):
self.grades.append(grades)
def create_copy(self): ### this is what I want to create
copy = student(self.name, self.year, self.number)
return copy
eden = student('eden', 2, 12345)
#update new grades of eden
eden.update_grades(100)
eden.update_grades(90)
eden.update_grades(80)
eden.update_grades(95)
new_eden = eden.create_copy() #created a new object, new_eden
new_eden.new_num(54321) #change a value
print(eden is new_eden) #False
print(eden.grades) #[100, 90, 80, 95]
print(new_eden.grades) #[]
虽然我似乎设法创建了一个具有不同id的对象的副本,但它显示一个实例变量self.grade尚未复制到新对象。我想知道如何复制与旧数据相同的所有数据。(在这种情况下,我错过了self.grades)提前谢谢:)
copy.grades=list(self.grades)
create\u copy@khelwood:Orcopy.grades=self.grades.copy()
copy.grades=self.grades[:],只是为了完整起见。在所有情况下,这只是一个肤浅的副本,但如果grades
存储不可变的类型,如int
s或float
s,那就好了。非常感谢。现在可以了!这回答了你的问题吗?