python2中怎么对一个自定义类进行浅复制?
时间: 2024-03-06 09:51:53 浏览: 46
如何由浅复制到深度复制
在Python2中,可以使用特殊方法`__copy__()`来实现自定义类的浅复制。`__copy__()`方法返回一个新的对象,该对象与原始对象具有相同的值,但是它们使用不同的内存地址。对于可变对象来说,浅复制将复制对象的引用,而不是对象本身。
举个例子,假设我们有一个自定义的类`Person`,并且我们想要对其进行浅复制,可以按照以下方式实现:
```python
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
self.hobbies = []
def __copy__(self):
new_person = self.__class__(self.name, self.age)
new_person.hobbies = self.hobbies
return new_person
```
在上面的例子中,我们定义了一个`Person`类,其中包含一个字符串类型的`name`属性,一个整数类型的`age`属性和一个列表类型的`hobbies`属性。我们定义了`__copy__()`方法,该方法创建一个新的`Person`对象,并将原始对象的属性值赋值给新对象,然后返回新对象的引用。需要注意的是,`__copy__()`方法不会对`hobbies`列表进行深复制,它只是复制了对原始列表的引用。因此,对新的`Person`对象所做的更改将会影响原始对象。
下面是一个简单的例子,演示了如何使用`__copy__()`方法对`Person`类进行浅复制:
```python
person1 = Person('Alice', 20)
person1.hobbies.append('reading')
person2 = copy.copy(person1)
person2.hobbies.append('music')
print(person1.hobbies) # 输出 ['reading', 'music']
print(person2.hobbies) # 输出 ['reading', 'music']
```
在上面的例子中,我们首先创建一个`Person`对象`person1`,并将`'reading'`添加到其`hobbies`列表中。然后,我们使用`copy.copy()`函数对`person1`进行浅复制,并将其存储在`person2`中。接着,我们将`'music'`添加到`person2`的`hobbies`列表中。最后,我们分别输出了`person1`和`person2`的`hobbies`列表,发现它们的值是相同的,这是因为浅复制只复制了`hobbies`列表的引用,而不是复制列表本身。
阅读全文