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

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 hexlifya = 0x12345678
print(hexlify(string_at(id(a), getsizeof(a))))

打印出来的代码:

b'0300000000000000d00fcd4dfb7f0000010000000000000078563412'

这儿看到末尾的78563412, 相当于12, 34, 56, 78 这4个字节进行了倒序排一下。由此我们发现内存中数据的表示和我们变量的表示是有一定的差异的。

参考内容:

python获取内存地址上存储的值_ainu2919的博客-CSDN博客

python变量与内存相关推荐

  1. python变量分配内存_Python | 声明任何变量而不分配任何值

    python变量分配内存 Since, Python is a dynamic programming language so there is no need to declare such typ ...

  2. Python变量的理解与内存管理

    Python变量与内存管理 –与C语言中的变量做对比,更好的理解Python的变量. 变量 变量在C语言中 全局变量:其存放在内存的静态变量区中. 局部变量:代码块中存放在内存的代码区当中,当被调用后 ...

  3. CrazyWing:Python自动化运维开发实战 四、Python变量

    导语: 1.什么是变量 2.变量名称的命名 3.变量赋值 4.变量存储数据的方式 5.引用计数 什么是变量: python学习过程中会用到许多数据,那为了方便操作,需要把这些数据分别用一个简单的名字代 ...

  4. 变量 常量 Python变量内存管理 赋值方式 注释

    目录 变量 1.什么是变量 2.为什么有变量? 3.定义变量 4.变量的组成 5.变量名的命名规范 6变量名的两种风格 常量 Python变量内存管理 1.变量存哪儿? 2.Python垃圾回收机制 ...

  5. php 打印变量内存地址_Python合集之Python变量

    在上一节的合集中,我们了解了Python的保留字与标识符,本节我们将进一步了解一下Python中关于变量的问题. 变量严格意义上来讲应该称之为"名称",也可以理解为标签. 在Pyt ...

  6. python变量类型是动态的_python内存动态分配过程详解

    一.前言 大多数编译型语言,变量在使用前必须先声明,其中C语言更加苛刻:变量声明必须位于代码块最开始,且在任何其他语句之前.其他语言,想C++和java,允许"随时随地"声明变量, ...

  7. python 变量大小,进程和内存信息

    原文链接: python 变量大小,进程和内存信息 上一篇: keras vgg19 InceptionResNetV2 ResNet50 模型使用 下一篇: keras 修改vgg19 对mnist ...

  8. 关于python变量使用下列说法中错误的是_关于Python内存管理,下列说法错误的是_学小易找答案...

    [单选题]Python 编程中用代码缩进表示逻辑递进关系,通常用几个空格 [判断题]决定系数(英语:coefficient of determination,记为R2或r2)在统计学中用于度量因变量的 ...

  9. python内存管理 变量无需事先声明_关于python本身的内存管理

    一.在python中,变量和内存管理的特点 1.变量无需事先声明 2.变量无需指定类型 3.程序员不用关心内存的管理问题 4.变量名会被回收 5.del语句能够直接释放资源 二.内存分配问题 在为变量 ...

最新文章

  1. 2015年12月流量入口占比动态:仅直接访问实现上涨
  2. python中装饰器的作用_Python装饰器详解,详细介绍它的应用场景
  3. 两个有序数组的中位数 python_Python寻找两个有序数组的中位数实例详解
  4. AndroidStudio中提示:uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared in libr
  5. 三点到六点是几个小时_你被“8小时睡眠论”给骗了吗?!
  6. Spring Boot 集成 Druid 监控数据源
  7. 阿里Java面试答案【283页PDF文档免费领】
  8. 检测文件是否有BOM 头,并删除BOM头(php)
  9. 在串口输入input keyevent发送按键值给机器
  10. 怎么通过安装包安装mysql_教你安装Mysql(解压版/非安装包)图文教程
  11. java txt转pdf乱码_java转pdf中文乱码应该如何处理
  12. 软件工程----开发大致流程
  13. JavaScript 页面跳转、页面重定向
  14. 计算机第二章测试题及答案,计算机组成原理第二章练习题及答案
  15. VMware虚拟机下Ubuntu系统安装VMware Tools
  16. Unity相机漫游脚本
  17. 如何连接Access数据库
  18. Vue项目中常见问题(23)动态展示Floor组件
  19. 行走自由的扫地机器人,可能正在偷偷监听你
  20. 如何编写软件架构文档

热门文章

  1. checkstyle用法
  2. python 深浅拷贝
  3. QT 进程间通信——共享内存
  4. 2009光棍节搞笑短信精选
  5. cesium.js入门(一)
  6. plsql 12 oracle home,plsql连接远程oracle home怎样设置
  7. 〖Python零基础入门篇㊸〗- 异常处理的避坑指南
  8. iPhone,iPad在国外如何看国内视频网站
  9. oracle跨表空间报错ORA00942,Oracle_ORA一些错误整理
  10. Java学习日志Day41_过滤器Filter 接口_项目更新:后台管理/前台统一处理全局乱码and用户列表---删除以及分页功能