引用、浅拷贝、深拷贝

时间:2022-11-18 19:33:52

1 对象的拷贝分类

  • 引用赋值
  • 浅拷贝
  • 深拷贝
    代码实例
class Person:

    def __init__(self, name, age):
        self.name = name
        self.age = age

2 引用赋值

引用赋值:程序中只有一个对象、复制了对象的引用,多个引用变量指向同一个对象

class Person:

    def __init__(self, name, age):
        self.name = name
        self.age = age


a = Person("tom", 24)
b = a

1.a创建一个变量,存放在堆内存里,创建一个Person对象,放在栈内存,指向的数据"tom",24存放在常量区。
2.b = a 即是b引用a变量的地址,不需要再创建任何东西
通过一个变量修改对象内容,另一个变量中的对象内容也发生变化

3 浅拷贝

浅拷贝:程序中有多个对象,多个对象中的数据属性,指向的是相同的数据

import copy

a = Person("tom", 24)
b = copy.copy(a)

1.aa创建一个变量,存放在堆内存里,创建一个Person对象,放在栈内存,指向的数据"tom",24存放在常量区
2.b创建一个变量存放在堆内存里;创建一个Person对象,放在栈内存,对象的数据指向a对象中的数据。
修改a指向对象中的数据,b变量指向对象中的数据也发生变化。

4 深拷贝

深拷贝:程序中有多个独立的对象

import copy

a = Person("tom", 24)
b = copy.deepcopy(a)

1.a创建一个变量,存放在堆内存里,创建一个Person对象,放在栈内存,指向的数据"tom",24存放在常量区。
2.b同样创建一个变量,存放在堆内存里,再创建一个Person对象放在栈内存;对象的数据在如果没有,在常量区创建,有,指向内存地址。
a变量中对象数据的变化并不会影响b变量中数据的变化。