2.运算符重载
1)Python中所有的类型都是类,所有的数据都是对象
2)Python中使用任意的运算符都是在相应类中的相应方法,每个运算符对应什么方30法,都是固定的。某种数据是否支持某个运算符操作就看这个数据类型是否实现了对应的方法。
4)运算符重载指的是在不同的类中实现同样的运算符对应的函数
3.钱拷贝和深拷贝
1)直接赋值
将变量中的地址直接赋给新的变量,赋值后两个变量的地址相同。
2)浅拷贝
字符串,列表和元组的切片,对象.copy(), 以及copy模块中的copy方法都是浅拷贝
拷贝后的数据与原来的数据相互独立,修改其中一个另外一个不会变,
注意:浅拷贝只考虑当前对象,不会对子对象进行拷贝。
3)深拷贝 -- 只有copy模块中的deepcopy
拷贝后的数据与原来的数据相互独立,修改其中一个另外一个不会变。
深拷贝会拷贝每一层的数据
4.枚举
枚举值的特点:
1)可以通过有意义的属性名直接显示数据
2)每个数据的值不能修改
3)可以做到不同的数据的值唯一
from enum import Enum, unique
@unique #表示值唯一不能修改
class PokerNum(Enum):
J = 11
Q = 12
K = 13
A = 1
class Color:
RED = (255, 0, 0)
print(PokerNum.J.value)
内存管理
1.内存的开辟
1)内存分为栈区间和堆区间;栈区间的内存自动开辟,自动释放,堆区间的内存需要程序员自己手动开辟和释放,但是python已经将堆区间内存的开辟和释放自动化
2)当给变量赋值的时候,系统会先在堆区间中开辟空间将数据存起来,然后再将数据在堆中的地址存到变量中,变量存在栈区间
3)注意:数字和字符串数据在开辟空间的时候会先检查内训中之前,是否已经在缓存区有这个数据,如果有就直接使用之前的数据,如没有才开辟新的空间保存数据。
4)备注:对数字和字符串的copy和deepcopy是不会产生新的地址的。改变其中一个数据另一个copy的也会改变
2.内存的释放
栈区间:全局的栈区间在程序结束后销毁,函数的栈区间在函数调用结束后销毁
堆区间:看一个对象是否销毁,就看这个对象的额引用计数是否为0 ,如果一个对象的引用计数为0,这个对象就会销毁,反之则不销毁(垃圾回收机制)
注意:python中针对对象的循环引用已经做了处理,程序员不需要写额外的代码来解决循环引用的问题
from sys import getrefcount -- 获取引用计算