📜  python 克隆对象 - Python (1)

📅  最后修改于: 2023-12-03 15:04:15.175000             🧑  作者: Mango

Python 克隆对象

在 Python 中,对象克隆(Clone)是创建对象副本的一种方式。克隆对象通常用于在不改变原始数据的情况下进行修改和操作。Python 中提供了多种方法来克隆对象。本文将介绍一些常用的方法。

浅拷贝

浅拷贝是创建一个新对象,该对象具有与原始对象相同的属性值。但是,如果原始对象包含引用类型的属性(如列表或字典),则新对象只是原始对象的引用。这意味着,在新对象上进行更改也会在原始对象上进行更改。

import copy

# 创建一个包含引用类型属性的对象
original_obj = {
    "name": "Alice",
    "age": 30,
    "hobbies": ["swimming", "reading", "travelling"]
}

# 创建浅拷贝
shallow_copy = copy.copy(original_obj)

# 修改浅拷贝
shallow_copy["age"] = 31
shallow_copy["hobbies"].append("cooking")

# 打印原始对象
print(original_obj)  # {"name": "Alice", "age": 30, "hobbies": ["swimming", "reading", "travelling", "cooking"]}
深拷贝

深拷贝是创建一个新对象,该对象具有与原始对象相同的属性值,包括引用类型的属性。这意味着,在新对象上进行更改不会影响原始对象。

import copy

# 创建一个包含引用类型属性的对象
original_obj = {
    "name": "Alice",
    "age": 30,
    "hobbies": ["swimming", "reading", "travelling"]
}

# 创建深拷贝
deep_copy = copy.deepcopy(original_obj)

# 修改深拷贝
deep_copy["age"] = 31
deep_copy["hobbies"].append("cooking")

# 打印原始对象
print(original_obj)  # {"name": "Alice", "age": 30, "hobbies": ["swimming", "reading", "travelling"]}    
基于 dict 克隆对象

这种方法利用 Python 中的 dict 属性,将一个对象的属性复制到另一个对象上,从而克隆一个对象。它适用于 Python 中的所有对象,但不能克隆一些内置类型,如 int、str、float 和 tuple。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def __str__(self):
        return f"{self.name} is {self.age} years old."

person1 = Person("Alice", 30)

# 克隆对象
person2 = Person(**person1.__dict__)

# 修改克隆对象
person2.name = "Bob"
person2.age = 31

# 打印原始对象
print(person1)  # Alice is 30 years old.

# 打印克隆对象
print(person2)  # Bob is 31 years old.
基于类克隆对象

这种方法利用 Python 中的类定义创建一个新的对象。为了克隆一个对象,需要将原始对象的属性作为参数传递给类构造函数。这种方法对于所有类型的对象都适用,并且可以克隆内置类型。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def __str__(self):
        return f"{self.name} is {self.age} years old."
    
    def clone(self):
        return Person(self.name, self.age)

person1 = Person("Alice", 30)

# 克隆对象
person2 = person1.clone()

# 修改克隆对象
person2.name = "Bob"
person2.age = 31

# 打印原始对象
print(person1)  # Alice is 30 years old.

# 打印克隆对象
print(person2)  # Bob is 31 years old.

以上是 Python 中常用的克隆对象方法。程序员可以根据需求选择相应的方法。