Python中类的拷贝
时间: 2023-11-05 14:15:19 浏览: 32
在Python中,有两种方式可以拷贝类:
1. 浅拷贝(Shallow Copy):
浅拷贝只会复制类的引用,而不会复制类中的对象。这意味着,如果修改原始类中的对象,那么拷贝类中的对象也会被修改。我们可以使用copy模块的copy()函数来进行浅拷贝:
```python
import copy
class MyClass:
def __init__(self, name):
self.name = name
my_class = MyClass("John")
my_class_copy = copy.copy(my_class)
print(my_class.name) # Output: John
print(my_class_copy.name) # Output: John
# 修改原始类中的对象
my_class.name = "Doe"
print(my_class.name) # Output: Doe
print(my_class_copy.name) # Output: Doe(因为浅拷贝只是复制了引用)
```
2. 深拷贝(Deep Copy):
深拷贝会复制类中的所有对象,包括嵌套的对象。这意味着,如果修改原始类中的对象,拷贝类中的对象不会被修改。我们可以使用copy模块的deepcopy()函数来进行深拷贝:
```python
import copy
class MyClass:
def __init__(self, name, address):
self.name = name
self.address = address
class Address:
def __init__(self, city, state):
self.city = city
self.state = state
address = Address("New York", "NY")
my_class = MyClass("John", address)
my_class_copy = copy.deepcopy(my_class)
print(my_class.name) # Output: John
print(my_class.address.city) # Output: New York
print(my_class.address.state) # Output: NY
print(my_class_copy.name) # Output: John
print(my_class_copy.address.city) # Output: New York
print(my_class_copy.address.state) # Output: NY
# 修改原始类中的对象
address.city = "Washington"
address.state = "WA"
print(my_class.address.city) # Output: Washington
print(my_class.address.state) # Output: WA
print(my_class_copy.address.city) # Output: New York(因为深拷贝复制了对象)
print(my_class_copy.address.state) # Output: NY(因为深拷贝复制了对象)
```