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计算最小优先级队列代码分享
Dec 18 Python
python使用ctypes模块调用windowsapi获取系统版本示例
Apr 17 Python
Windows下使Python2.x版本的解释器与3.x共存的方法
Oct 25 Python
python实现简单socket通信的方法
Apr 19 Python
Python科学计算之NumPy入门教程
Jan 15 Python
浅谈python中np.array的shape( ,)与( ,1)的区别
Jun 04 Python
Python基于多线程实现ping扫描功能示例
Jul 23 Python
Django 表单模型选择框如何使用分组
May 16 Python
微信公众号token验证失败解决方案
Jul 22 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
Nov 15 Python
wxPython色环电阻计算器
Nov 18 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
May 20 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 程序员应该使用的10个组件
2009/10/31 PHP
PHP+JS实现大规模数据提交的方法
2015/07/02 PHP
由php中字符offset特征造成的绕过漏洞详解
2017/07/07 PHP
DOM Scripting中的图片切换[兼容Firefox]
2010/06/12 Javascript
JavaScript传递变量: 值传递?引用传递?
2011/02/22 Javascript
jquery.ui.draggable中文文档(原文翻译)
2013/11/15 Javascript
javascript字母大小写转换的4个函数详解
2014/05/09 Javascript
JS小游戏之宇宙战机源码详解
2014/09/25 Javascript
jQuery中appendTo()方法用法实例
2015/01/08 Javascript
javascript数组去重的方法汇总
2015/04/14 Javascript
javascript单例模式的简单实现方法
2015/07/25 Javascript
Javascript点击其他任意地方隐藏关闭DIV实例
2016/06/21 Javascript
angularjs定时任务的设置与清除示例
2017/06/02 Javascript
如何以Angular的姿势打开Font-Awesome详解
2018/04/22 Javascript
微信小程序swiper使用网络图片不显示问题解决
2019/12/13 Javascript
Vue实现手机计算器
2020/08/17 Javascript
使用python编写脚本获取手机当前应用apk的信息
2014/07/21 Python
Java Web开发过程中登陆模块的验证码的实现方式总结
2016/05/25 Python
使用python实现生成用户信息
2017/03/20 Python
对numpy和pandas中数组的合并和拆分详解
2018/04/11 Python
使用python的pandas库读取csv文件保存至mysql数据库
2018/08/20 Python
python字符串和常用数据结构知识总结
2019/05/21 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
2019/08/27 Python
python修改FTP服务器上的文件名
2019/09/11 Python
Python函数的默认参数设计示例详解
2019/12/01 Python
pytorch实现Tensor变量之间的转换
2020/02/17 Python
Python基于paramunittest模块实现excl参数化
2020/04/26 Python
django项目中使用云片网发送短信验证码的实现
2021/01/19 Python
浅谈HTML5 defer和async的区别
2016/06/07 HTML / CSS
美国家用和厨房电器销售网站:Appliances Connection
2020/01/24 全球购物
西部世纪.net笔试题面试题
2014/04/03 面试题
教师优秀党员事迹材料
2014/08/14 职场文书
2014年保卫工作总结
2014/12/05 职场文书
节水宣传标语口号
2015/12/26 职场文书
社会实践心得体会范文
2016/01/14 职场文书
sqlserver连接错误之SQL评估期已过的问题解决
2022/03/23 SQL Server