python基础(五)

内存模型

每一个编程语言的背后都有自己独特的内存模型支持,比如最经典的C语言,一个int类型占8字节。那么在python中不区分数据类型,定义一个变量其在内存在占用多少字节呢?python中数据的运算其内存是如何变化的呢?

在回答上面的问题之前,首先看一下python中可变的数据和不可变数据

一、可变对象和不可变对象

Python一切数据皆为对象,python中的对象分成两类:可变对象和不可变对象。所谓可变对象是指,对象的内容可变,而不可变对象是指对象内容不可变。

不可变(immutable):数值(int、float)、字符串(string)、元组(tuple)

可变(mutable):字典型(dictionary)、列表型(list)
在这里插入图片描述
根据对象的分类,可以将数据类型也做一个分类,可变数据类型与不可变数据类型:

可变数据类型:列表list和字典dict

不可变数据类型:整型int、浮点型float、字符串型string和元组tuple
在这里插入图片描述

可变对比不可变

这里的可变不可变,是指内存中的那块内容是否可以被改变。

如果是不可变类型,在对对象本身操作的时候,必须在内存中新申请一块区域(因为老区域不可变)。创建a=1整型对象,执行a=2时,内存中的对象1是不变的,只是重新创建了对象2。

如果是可变类型,对对象操作的时候,不需要再在其他地方申请内存,只需要在此对象后面连续申请(+/-)即可,也就是它的内存地址会保持不变,但区域会变长或者变短。
当对可变和不可变对象运算时会内存中会发生什么事情呢?对比来看

不可变数据类型:不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象,内部会有一个引用计数来记录有多少个变量引用这个对象;
可变数据类型:允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。

python对于数据的特殊处理

小整数

Python为了优化速度,避免为整数频繁申请和销毁内存空间,使用了小整数对象池。对小整数的定义是 [-5, 256] 这些整数对象是提前建立好的,不会被垃圾回收。在这个范围内所有的整数都只会被建立一次。

a = 100
b = 100
print(id(a))
print(id(b))
--------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值