内存管理和拷贝
1.多继承
字段都可以继承
方法都可以继承
只能继承第一个父类的对象属性
python中的类支持多继承
class 子类(父类1, 父类2, ...):
pass
运算符重载
1.运算符
python中所有的数据类型本质都是类
所有的数据本身都是对象
在使用运算符对数据进行操作的时候,实质是调用运算符对应的魔法方法;
运算符前面的数据类型,决定了函数哪个类中对应的魔法方法
每个运算符都有自己固定的魔法方法,看某种类型的数据是否支持某种运算符就看这个类型中有没有实现对应的魔法方法
函数的返回值就是运算结果
class Student:
def __init__(self, name, age, score=0):
self.name = name
self.age = age
self.score = score
def __add__(self, other):
return self.name + other.name
内存管理
手动内存管理
内存分为栈区间和堆区间。栈区间是自动开辟自动释放;堆上的内存需要程序员写代码申请和释放
1.内存的开辟
python中所有的类型都是类,所以所有的数据都是对象,都保存在堆区间里;
变量保存在栈区间;变量实际上是存储堆中的数据的地址(变量的本质就是指针)
注意: 除了数字和字符串对象,其他的数据都是每次需要数据的时候直接在堆中开辟空间
数字和字符串会先检查是否这个数据之前是否保存在缓存区过,如果保存过就直接用之前的数据,没保存过才开辟新的空间
2.内存的释放
python中内存的释放采用的是'垃圾回收机制'自动释放
a.垃圾回收机制:
- 看一个数据是否需要销毁(是否需要回收),就看这个对象的引用计数是否为0(引用:保存对象地址的数据)
- 如果这个对象的引用计数不为0就假设当前对象消失,然后看会不会有其他的对象因为他的消失而引用计数变为0
如果有,就将另外一个对象回收(循环引用解环)
b.循环引用:
注意:用一个变量给另外一个变量赋值,实质赋的是变量地址
浅拷贝和深拷贝
使用变量的三种情况:
1.直接赋值 - 赋的是地址,赋完值两个变量一模一样
变量1 = 变量2
2.浅拷贝
列表[:]、列表.copy()、copy.copy(数据)
浅拷贝: 直接复制被拷贝的数据,产生一个新的地址,将新的地址赋给变量;如果被拷贝的对象有子对象,子对象不会被复制
3.深拷贝
copy.deepcopy(数据)
深拷贝: 直接复制被拷贝的数据,产生一个新的地址,将新的地址赋给变量;如果被拷贝的对象有子对象,子对象也会被复制