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变量中数据的变化。