python中的变量与内存用法

 更新时间:2024年06月26日 11:30:59   作者:永远的麦田  
这篇文章主要介绍了python变量与内存用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一、变量与内存的结构关系

python的变量类似于标签的作用,内容散布于内存中,为了方便管理,用变量把这些内存中的内容标示出来。

如下图所示:

一般python的内存结构以64字节为一个单位,随便在python中申明变量abcdef,并赋上值,对应的内存结构大致是这样:

需要注意的是:

分配出来的内存可能是连续的,下一个内存比上一个内存多64个字节,也可能是不连续的,为64个字节的倍数。

这样就可以看出来,变量a或是b只是一个标签,指向实际的内容,方便人类识别他们代表什么东西。

如果把a指向的值赋给b,把e指向的字符串赋给f会发生什么呢,

下图可以表示:

标签a和b指向了实际内容0x12345678, e和f指向了实际内容"dog“,针对地址0x16a0c466650上的值0x98981234还存在这个地址上,只是暂时没有变量指向他(在没有被系统回收前),同样,地址0x16a788e32f0上表示的字符串"cat”也同样没有变量指向他。

二、变量的内存表示

变量的内存表示很简单,id()可表示内存的十进制,若要表示其16进制,再加上hex即可

在第一幅图中变量a和b的指向的地址分别为

  • >>>hex(id(a))
  • '0x16a0c466610'
  • >>>hex(id(b))
  • '0x16a0c466650'

在第二幅图中变量a和b的指向相同的内存地址

  • >>>hex(id(a))
  • '0x16a0c466610'
  • >>>hex(id(b))
  • '0x16a0c466610'

三、查看内存地址的变量

可以用到ctypes的string_at, sys中的getsizeof,再通过binascii中的hexlify进行转码

# -*- coding: utf-8 -*-
from ctypes import string_at
from sys import getsizeof
from binascii import hexlify
 
a = 0x12345678
print(hexlify(string_at(id(a), getsizeof(a))))

打印出来的代码:

b'0300000000000000d00fcd4dfb7f0000010000000000000078563412'

这儿看到末尾的78563412, 相当于12, 34, 56, 78 这4个字节进行了倒序排一下。

由此我们发现内存中数据的表示和我们变量的表示是有一定的差异的。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • python+opencv像素的加减和加权操作的实现

    python+opencv像素的加减和加权操作的实现

    这篇文章主要介绍了python+opencv像素的加减和加权操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • python最长回文串算法

    python最长回文串算法

    这篇文章主要为大家详细介绍了python最长回文串算法的实践,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Python进行音频片断合成的控制的几种方法实现

    Python进行音频片断合成的控制的几种方法实现

    本文主要介绍了Python进行音频片断合成的控制的几种方法实现,包括synthesizer库自定义波形、pydub处理音频片段、gtts和pyttsx3文本转语音及pico2wave,感兴趣的可以了解一下
    2025-06-06
  • 详解Python中的四种队列

    详解Python中的四种队列

    队列是一种只允许在一端进行插入操作,而在另一端进行删除操作的线性表。这篇文章主要介绍了Python中的四种队列,需要的朋友可以参考下
    2018-05-05
  • python函数的5种参数详解

    python函数的5种参数详解

    昨天看《Python核心编程》的时候,刚好看到了函数部分,于是顺势将目前接触到的集中参数类型都总结一下吧^^
    2017-02-02
  • python实现定时压缩指定文件夹发送邮件

    python实现定时压缩指定文件夹发送邮件

    这篇文章主要为大家详细介绍了python实现定时压缩指定文件夹发送邮件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • 解决django FileFIELD的编码问题

    解决django FileFIELD的编码问题

    这篇文章主要介绍了解决django FileFIELD的编码问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Python基于pip实现离线打包过程详解

    Python基于pip实现离线打包过程详解

    这篇文章主要介绍了Python基于pip实现离线打包过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 关于Python连接Cassandra容器进行查询的问题

    关于Python连接Cassandra容器进行查询的问题

    这篇文章主要介绍了Python连接Cassandra容器进行查询的问题,问题的关键在于寻找到Cassandra的9042端口,从而获取数据,具有内容详情跟随小编一起看看吧
    2021-11-11
  • 深度辨析Python的eval()与exec()的方法

    深度辨析Python的eval()与exec()的方法

    这篇文章主要介绍了深度辨析Python的eval()与exec()的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03

最新评论