Day16_学习总结

Day16.png

1 重载运算符

python中所有的数据类型都是类,数据都是对象;所有的运算符对应的操作,本质都是在调用数据类型对应的魔法方法,每个运算符都对应一个固定的魔法方法。

class Student(object):
    def __init__(self, name, age=0, score=0):
        self.name = name
        self.age = age
        self.score = score

    def __add__(self, other):
        return self.age + other.age

    def __gt__(self, other):
        return self.score > other.score
    # 比较相同属性时,>和<只需要重载一个


stu1 = Student('小明', 18, 60)
stu2 = Student('小花', 22, 80)
print(stu1 + stu2)
print(stu1 > stu2)
# 练习让student的对象支持乘法运算,运算规则是:
# <name:张三,age:10,score:0> * 3 = [<name:张三,age:10,score:0>,<name:张三,age:10,score:0>,<name:张三,age:10,score:0>]

class Student(object):
    def __init__(self, name='张三', age=10, score=0):
        self.name = name
        self.age = age
        self.score = score
    def __repr__(self):
        return '<' + str(self.__dict__)[1:-1] + '>'


    def __mul__(self, other):
        list1 = []
        for i in range(other):
            list1.append(self)
        return list1

s1 = Student()
result = s1 * 3
print(result)
s1.name = '小明'
print(result)  # 改变属性后,列表内容随之改变

2、深拷贝和浅拷贝

一个变量直接给另一个变量赋值,直接将地址赋值,赋完后,两个变量指向一个内存区域,并且相互影响.
拷贝原理:将被拷贝的对象复制一份,产生一个新的数据,再将新数据的地址返回

2.1 浅拷贝

a.列表或字典的copy方法时浅拷贝、切片也是浅拷贝
b.copy.copy(对象) -- 复制指定的对象,产生一个新的对象

2.2 深拷贝

copy.deepcopy(对象) -- 复制指定的对象,产生一个新的对象。如果这个对象中有其他的对象,子对象也会被复制。

import copy  # 拷贝前需导入copy模块
stu2 = Student('Lisa', 18, 60)
stu4 = copy.copy(stu2)
stu2.name = 'Sara'
print(stu2, stu4)

3 内存管理机制

3.1 数据的储存

python的内存空间也可以分为栈区间和堆区间。
变量(包括函数调用过程中的变量)都储存在栈区间,对象都储存在堆区间。
声明变量或给变量赋值,是先在内存(堆)中开辟存储数据,然后将数据地址保存在变量中。
但是数字和字符串特殊,如果是用数字或者字符串给变量赋值,不会直接开辟空间保存数据,而是现在内存检测这个数据之前是否已经储存过,如果已经存储直接用上次保存的数据,没有存储才会开辟新的空间保存数据。

list1 = [1,2]
list2 = [1,2]
print(id(list1), id(list2))

a = 10
b = copy.deepcopy(a)  # 即使使用copy方法,地址还是一样
print(id(a), id(b))

c = 'abc'
d = 'abc'
print(id(c), id(d))

3.2 内存的释放

python中每个对象都有一个熟悉叫引用计数,用来保存当前对象的引用个数。
python中的垃圾回收机制来判断一个对象是否销毁,就看这个对象的引用计数是否为零,如果为零就会被销毁

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容