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文件读写并使用mysql批量插入示例分享(python操作mysql)
Feb 17 Python
使用pdb模块调试Python程序实例
Jun 02 Python
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
May 03 Python
Python MySQL数据库连接池组件pymysqlpool详解
Jul 07 Python
python实现隐马尔科夫模型HMM
Mar 25 Python
浅析python的Lambda表达式
Feb 27 Python
python实现批量文件重命名
Oct 31 Python
django中url映射规则和服务端响应顺序的实现
Apr 02 Python
Django之全局使用request.user.username的实例详解
May 14 Python
Django model class Meta原理解析
Nov 14 Python
浅析python实现动态规划背包问题
Dec 31 Python
Python之京东商品秒杀的实现示例
Jan 06 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正确配置mysql(apache环境)
2011/08/28 PHP
通过php快速统计某个数据库中每张表的数据量
2012/09/04 PHP
php微信公众号开发之快递查询
2018/10/20 PHP
JavaScript 产生不重复的随机数三种实现思路
2012/12/13 Javascript
JS中使用Array函数shift和pop创建可忽略参数的例子
2014/05/28 Javascript
探索angularjs+requirejs全面实现按需加载的套路
2016/02/26 Javascript
jQuery获取与设置iframe高度的方法
2016/08/01 Javascript
再谈Javascript中的异步以及如何异步
2016/08/19 Javascript
js给table赋值的实例代码
2016/10/13 Javascript
canvas 弹幕效果(实例分享)
2017/01/11 Javascript
NodeJS测试框架mocha入门教程
2017/03/28 NodeJs
NodeJS实现微信公众号关注后自动回复功能
2017/05/31 NodeJs
Angular2 组件间通过@Input @Output通讯示例
2017/08/24 Javascript
利用three.js画一个3D立体的正方体示例代码
2017/11/19 Javascript
bootstrap table支持高度百分比的实例代码
2018/02/28 Javascript
Angular angular-file-upload文件上传的示例代码
2018/08/23 Javascript
Vue.js图片预览插件使用详解
2018/08/27 Javascript
JS异步宏队列与微队列原理区别详解
2020/07/02 Javascript
详解React的回调渲染模式
2020/09/10 Javascript
JavaScript 中的执行上下文和执行栈实例讲解
2021/02/25 Javascript
[53:29]完美世界DOTA2联赛循环赛 DM vs Matador BO2第二场 11.04
2020/11/05 DOTA
python采用requests库模拟登录和抓取数据的简单示例
2014/07/05 Python
Python基于socket实现简单的即时通讯功能示例
2018/01/16 Python
用python统计代码行的示例(包括空行和注释)
2018/07/24 Python
python中matplotlib实现随鼠标滑动自动标注代码
2020/04/23 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
2020/08/11 Python
CSS3 实现弹幕的示例代码
2017/08/07 HTML / CSS
解决Firefox下不支持outerHTML问题代码分享
2014/06/04 HTML / CSS
美国机场停车位预订:About Airport Parking
2018/03/26 全球购物
澳大利亚婴儿礼品公司:The Baby Gift Company
2018/11/04 全球购物
介绍一下Mysql的存储引擎
2015/02/12 面试题
初级Java程序员面试题
2016/03/03 面试题
班组建设经验交流材料
2014/05/12 职场文书
公司周年庆典标语
2014/10/07 职场文书
大学文艺委员竞选稿
2015/11/19 职场文书
Python使用scapy模块发包收包
2021/05/07 Python