Python总结

Day16 内存管理和拷贝

2019-08-12  本文已影响0人  风月辞寒

1.多继承

python中的类支持多继承(让一个类同时继承多个类);

多继承的时候子类只能继承第一个父类所有的属性和方法, 后面的父类只有字段和方法可以被继承(也就是方法名一样的时候继承的是前面的父类的方法)

2.运算符

python中所有的类型都是类, 所以所有的数据都是对象;
python中使用任意的运算符都是在调用相应的类中的相应方法, 每一个运算符对应什么方法是固定的
某种数据是否支持某个运算符操作就看这个数据类型中是否实现了对应的方法

2.1 运算符重载指的是在不同的类中实现同样的运算符对应的函数

类的对象默认情况下只支持: ==, !=

注意: < 和 > 符号只需要重载其中一个就可以

3.浅拷贝和深拷贝

3.1 直接赋值

将变量中的地址直接赋值给新的变量; 赋值后两个变量的地址相同

3.2 拷贝

不管是浅拷贝还是深拷贝都会原数据进行赋值产生新的地址

3.3 浅拷贝

字符串, 列表, 元组的切片; 对象.copy(); copy模块中的copy方法都是浅拷贝
浅拷贝只拷贝当前对象, 不会对子对象进行拷贝

4.深拷贝

copy模块中的deepcopy方法是深拷贝

4.枚举

枚举值的特点:

引用Enum类和unique值唯一装饰器
1.可以通过有意义的属性名直接显示数据
2.每个数据不能修改
3.可以做到不同数据的值是唯一的

5.内存管理

5.1 内存的开辟

内存区间分为栈区间和堆区间; 栈区间的内存自动开辟自动释放, 堆区间需要程序员手动开辟和手动释放
但是python已经将堆区间内存的开辟和释放自动化

a. 当给变量赋值时, 系统会先在堆区间中开辟空间将数据存起来, 然后再将数据在堆中的地址存到变量中, 变量存在栈区间;
b. 数字数据和字符串数据在开辟空间的时候, 会先检查内存中是否已经有这个数据, 如果有就直接使用之前的数据, 没有才开辟空间保存

5.2 内存的释放

**栈区间: **全局栈区间在程序结束后销毁, 函数栈区间在函数调用结束后销毁(自动)
堆区间: 看一个对象是否销毁, 就看这个对象的引用计数是否为0; 如果一个对象的引用计数为0, 这个对象就会销毁(垃圾回收机制)

注意: python中针对对象的循环引用已经做了处理, 程序员不需要写额外的代码来解决循环引用问题

上一篇下一篇

猜你喜欢

热点阅读