python中的变量如何开辟内存


Posted in Python onJune 26, 2018

python下的变量

不需要预先声明变量的类型,变量的类型和值在赋值的那一刻被初始化(声明和定义的过程一起完成)

在python中, 每一个变量在内存中创建,我们可以通过变量来查看内存中的值

哈哈,这里是不是很熟悉,跟c中的指针一样啊(访问内存中的值)

首先大家需要了解一点:在python中:

x =5之后,我们要了解它的过程:系统先是找了一块内存,将5存储了进去,紧接着x指向了当前的这块内存

预测1:python下的变量是一个指针

>>> x = 4 
>>> y = 5 
>>> print x 
4 
>>> print y 
5 
>>> id(x) 
10413988 
>>> id(y) 
10413976 
>>> x = y 
>>> id(x) 
10413976 
>>> id(y) 
10413976 
>>>

从上面我们可以看到:

x = 4

说明x指向了内存中存储为4的那个地址,那个地址是10413988

y = 5

说明y指向了内存中存储为5的那个地址,那个地址是10413976

python中的变量如何开辟内存

也就是说在执行x = 4,y = 5之后,x,y分别指向了不同的地址,当执行 x = y之后:

python中的变量如何开辟内存

也就是说,x指向了y所指向的内存了,这里我们知道,它们都指向同一块内存

哈哈,原来跟c里面的指针真的一样哎!!!哈哈哈

(但是,但是,但是:就这些吗??)

>>> x = 4 
>>> print x 
4 
>>> id(x) 
10413988 
>>> x = 5 
>>> print x 
5 
>>> id(x) 
10413976 
>>>

好,我们大家接着看:

python中的变量如何开辟内存

也就是说:开始的时候,x指向了10413988这块内存,里面存储的是4

当执行了x = 5之后,也就变成了这样:

python中的变量如何开辟内存

好,ok就是这样了,

不知道大家注意到了吗?

在python中,一开始初始化存储在内存的东西是不可以更改的,我们所能更改的只是它的指向,

但是,但是,在c中,对于int x= 4; 也就是说x的地址是定的,里面存储的东西可以更改

#include <stdio.h> 
 
int main(){ 
 int x = 4; 
 printf("%p %d\n", &x, x); 
 x = 5; 
 printf("%p %d\n", &x, x); 
  
 return 0; 
}

我们大家再看一下运行结果:

python中的变量如何开辟内存

从上面可以看到,地址并没有变,好了,这一点,python和c的区别较大,希望大家注意。

二: 内存大小

我们来看一下这样的代码:

>>> x = 6 
>>> id(x) 
10413964 
>>> y = 7 
>>> id(y) 
10413952 
>>> z = 8 
>>> id(z) 
10413940 
>>>

从上面的程序中,我们知道系统给分配的地址分别是:

10413964
10413952
10413940

所以我们大胆推测,python中应该给这些整数的字节有可能就是12(哈哈,纯属个人推测)

有可能内存中就是这样了的:

python中的变量如何开辟内存

哈哈,也该就是这样子了, 至于其他的大小,有兴趣的朋友可以研究研究

三:python内存

是不是说:在python中,系统将每一个值都放在了一个固定的位置,不然为什么,每一次探究内存地址的时候,结果都是一样的(数值相等,地址也相等)

>>> x = 4 
>>> y = 5 
>>> id(x) 
10413988 
>>> id(y) 
10413976 
>>>

假如系统为4分配了一块内存,遵循某种规则(类似于c里面的内存对齐),那么接下来为5分配了另一块内存,权且分配到了10413976

那么下面这个如何解释:

>>> x = 4 
>>> y = 6 
>>> id(x) 
10413988 
>>> id(y) 
10413964 
>>>

假如遵循某种规则的话,应该是6也分配到了10413976去了,可是,他被分配到了10413964

我们再来看:

>>> x = 4 
>>> y = 6 
>>> id(x) 
10413988 
>>> id(y) 
10413964 
>>> z = 5 
>>> id(z) 
10413976 
>>>

这,哈哈,应该就是这样的了的吧!!!!

也就是说:python中,系统还是python本身为其分配内存的时候就已经根据这个值是多少,确定了内存的位置了。。。

以上这篇python中的变量如何开辟内存就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python通过colorama模块在控制台输出彩色文字的方法
Mar 19 Python
使用Python程序抓取新浪在国内的所有IP的教程
May 04 Python
python中list常用操作实例详解
Jun 03 Python
Python可变参数函数用法实例
Jul 07 Python
详解Django框架中用context来解析模板的方法
Jul 20 Python
python bmp转换为jpg 并删除原图的方法
Oct 25 Python
新年快乐! python实现绚烂的烟花绽放效果
Jan 30 Python
简单了解python代码优化小技巧
Jul 08 Python
python实现输入的数据在地图上生成热力图效果
Dec 06 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
Jul 09 Python
python获取系统内存占用信息的实例方法
Jul 17 Python
Django配置跨域并开发测试接口
Nov 04 Python
pyQt4实现俄罗斯方块游戏
Jun 26 #Python
朴素贝叶斯分类算法原理与Python实现与使用方法案例
Jun 26 #Python
python实现俄罗斯方块
Jun 26 #Python
解决python报错MemoryError的问题
Jun 26 #Python
pygame实现俄罗斯方块游戏
Jun 26 #Python
python和pygame实现简单俄罗斯方块游戏
Feb 19 #Python
解决python读取几千万行的大表内存问题
Jun 26 #Python
You might like
PHP下判断网址是否有效的代码
2011/10/08 PHP
php设计模式之单例、多例设计模式的应用分析
2013/06/30 PHP
destoon安装出现Internal Server Error的解决方法
2014/06/21 PHP
Zend Framework教程之Autoloading用法详解
2016/03/08 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
2017/06/08 PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
2018/01/29 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
jQuery基础框架浅入剖析
2012/12/27 Javascript
jquery遍历数组与筛选数组的方法
2013/11/05 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
JS获取屏幕高度的简单实现代码
2016/05/24 Javascript
js获取元素的标签名实现方法
2016/10/08 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
2016/12/20 Javascript
JS+html5制作简单音乐播放器
2020/09/13 Javascript
self.attachevent is not a function的解决方法
2017/04/04 Javascript
详解Vue2.0 事件派发与接收
2017/09/05 Javascript
React学习之事件绑定的几种方法对比
2017/09/24 Javascript
Vee-validate 父组件获取子组件表单校验结果的实例代码
2019/05/20 Javascript
vue组件三大核心概念图文详解
2019/05/30 Javascript
Taro小程序自定义顶部导航栏功能的实现
2020/12/17 Javascript
[06:24]DOTA2 2015国际邀请赛中国区预选赛第二日TOP10
2015/05/27 DOTA
详解Python的collections模块中的deque双端队列结构
2016/07/07 Python
浅谈python中np.array的shape( ,)与( ,1)的区别
2018/06/04 Python
对python函数签名的方法详解
2019/01/22 Python
python3实现elasticsearch批量更新数据
2019/12/03 Python
Python Switch Case三种实现方法代码实例
2020/06/18 Python
UI自动化定位常用实现方法代码示例
2020/10/27 Python
Python环境配置实现pip加速过程解析
2020/11/27 Python
蒂芙尼澳大利亚官方网站:Tiffany&Co. Australia
2017/08/27 全球购物
台湾屈臣氏网路商店:Watsons台湾
2020/12/29 全球购物
配置管理计划的主要内容有哪些
2014/06/20 面试题
HttpServlet类中的主要方法都有哪些?各自的作用是什么?
2014/03/16 面试题
对标管理实施方案
2014/03/12 职场文书
出租房屋协议书
2014/09/14 职场文书
债务纠纷委托书范本
2014/10/14 职场文书
中学生运动会广播稿
2015/08/19 职场文书