day16总结

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 -- 获取引用计算
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,135评论 1 32
  • 1. 多继承 python中的类支持多继承(让一个类同时继承多个类);多继承的时候,子类只能继承第一个父类所有的属...
    酒煮灬核弹头阅读 293评论 0 0
  • 1.多继承 python中的类支持多继承(让一个类同时继承多个类) 多继承的时候,子类只能继承第一个父类中所有的属...
    举颗凤梨阅读 271评论 0 1
  • 那么趁着假期有空(被催稿的按在桌前……),小白这次跟大家好好介绍一下腰和腹的关系,以及他们周围的那些深层小鲜肉小肌...
    小白运动阅读 722评论 0 5
  • 有一种人就是乞求爱情的兽 一个孤独没有安全感的兽 这种人天生就离不开爱情 在友情与爱情的重量下 他们总说友情第一爱...
    小太阳rrr阅读 190评论 0 2