2.程序内存代码检测以及操作符号:is 和 == 的使用

1.程序内存代码分析

Python对于内存的操作,社区开发了一款比较强大的专门用于检测代码内存使用率,用于

项目代码调优的模块 memory_profile 是一个使用较为简单,并且可视化比较直观的工具

模块,通过 pip 工具安装即可使用.

Pip install memory_profiler

通过在测试的函数或者类型等前面添加@profile 注解,让内存分析模块可以直接进行代码

运行检测,修改上一节代码如下:


from memory_profiler import profile


@profile
def chg_data_1(x):
    x = 12
    print("method: {}".format(x))

@profile
def chg_data_2(y):
    y.append("hello")
    print("method: {}".format(y))


if __name__ == "__main__":
    a = 10
    chg_data_1(a)   # 实际参数传递不可变类型
    print("main:", a)   # 这里 a 是多少?  10
    b = [1,2,3]
    chg_data_2(b)   # 实际参数传递可变类型
    print("main:", b)    # 这里的 b 是多少? [1,2,3,’hello’]

代码执行结果如下:

D:\python36\python.exe C:/Users/leeking/PycharmProjects/python/内存分析/demo05.py
method: 12
Filename: C:/Users/leeking/PycharmProjects/python/内存分析/demo05.py

Line #    Mem usage    Increment   Line Contents
================================================
     4     16.2 MiB     16.2 MiB   @profile
     5                             def chg_data_1(x):
     6     16.2 MiB      0.0 MiB       x = 12
     7     16.2 MiB      0.0 MiB       print("method: {}".format(x))


main: 10
method: [1, 2, 3, 'hello']
Filename: C:/Users/leeking/PycharmProjects/python/内存分析/demo05.py

Line #    Mem usage    Increment   Line Contents
================================================
    10     16.2 MiB     16.2 MiB   @profile
    11                             def chg_data_2(y):
    12     16.2 MiB      0.0 MiB       y.append("hello")
    13     16.2 MiB      0.0 MiB       print("method: {}".format(y))


main: [1, 2, 3, 'hello']

2.操作符号:is和==的使用

前面看过变量以及对象在内存中的分配和执行情况,那么怎样判断对象和对象之间的关系呢.python中提供了对象比较的操作符 is 和内容操作符 ==, 用于判断对象和对象中的值的情况

A  is  B  : 判断对象A和对象B是否指向同一个内存地址,即是否为同一个对象

A  ==  B  : 判断对象A和对象B中的内容是否一致

Ps: 判断一个对象是否属于一个类型可以使用函数 isinstance(A, 类型).

不可变数据类型的数据判断

组合数据类型的数据判断

因为创建的每个组合数据类型的对象都是独立的,所以a is b 的结果是False,但是列表中的值是相同的,所以a == b 的结果是True

自定义数据类型的数据判断

因为自定义数据类型在创建对象时,会在堆内存中单独创建对象,所以 is的判断是False.但是我们使用相同的name值创建的对象在==判断中的结果还是False呢,因为在==判断过程中,会自动调用父类中的__eq__魔法函数进行判断,默认情况下,创建的对象内部变量,使用的是对象自己的内存空间,所以==判断是 False

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值