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 正确保留多位小数的实例
Jul 16 Python
解决python中遇到字典里key值为None的情况,取不出来的问题
Oct 17 Python
Django中信号signals的简单使用方法
Jul 04 Python
Python读取分割压缩TXT文本文件实例
Feb 14 Python
Python greenlet和gevent使用代码示例解析
Apr 01 Python
jupyter notebook 调用环境中的Keras或者pytorch教程
Apr 14 Python
构建高效的python requests长连接池详解
May 02 Python
Python3爬虫mitmproxy的安装步骤
Jul 29 Python
属性与 @property 方法让你的python更高效
Sep 21 Python
Python 使用dict实现switch的操作
Apr 07 Python
opencv-python图像配准(匹配和叠加)的实现
Jun 23 Python
python套接字socket通信
Apr 01 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
Apache2 httpd.conf 中文版
2006/12/06 PHP
PHP屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT
2013/03/06 PHP
利用php递归实现无限分类 格式化数组的详解
2013/06/08 PHP
thinkphp使用literal防止模板标签被解析的方法
2014/11/22 PHP
PHP用户验证和标签推荐的简单使用
2016/10/31 PHP
基于JQuery的模拟苹果桌面Dock效果(稳定版)
2012/10/15 Javascript
关于jquery中全局函数each使用介绍
2013/12/10 Javascript
javascript文件中引用依赖的js文件的方法
2014/03/17 Javascript
$.extend 的一个小问题
2015/06/18 Javascript
js如何打印object对象
2015/10/16 Javascript
JS实现状态栏跑马灯文字效果代码
2015/10/24 Javascript
JS实现禁止鼠标右键的功能
2016/10/15 Javascript
bootstrap fileinput完整实例分享
2016/11/08 Javascript
BootStrap table使用方法分析
2016/11/08 Javascript
利用Js+Css实现折纸动态导航效果实例源码
2017/01/25 Javascript
Bootstrap3 模态框使用实例
2017/02/22 Javascript
一道面试题引发的对javascript类型转换的思考
2017/03/06 Javascript
浅谈如何使用 webpack 优化资源
2017/10/20 Javascript
nodejs基于WS模块实现WebSocket聊天功能的方法
2018/01/12 NodeJs
Vue之Vue.set动态新增对象属性方法
2018/02/23 Javascript
利用hasOwnProperty给数组去重的面试题分享
2018/11/05 Javascript
JavaScript 链表定义与使用方法示例
2020/04/28 Javascript
JQuery Ajax如何实现注册检测用户名
2020/09/25 jQuery
[01:19:46]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第一场 2月28日
2021/03/11 DOTA
python使用xmlrpclib模块实现对百度google的ping功能
2015/06/02 Python
利用python画出折线图
2018/07/26 Python
python requests证书问题解决
2019/09/05 Python
python通过nmap扫描在线设备并尝试AAA登录(实例代码)
2019/12/30 Python
django项目中新增app的2种实现方法
2020/04/01 Python
Pycharm快捷键配置详细整理
2020/10/13 Python
物业经理求职自我评价
2013/09/22 职场文书
人力资源管理专业应届生求职信
2013/09/28 职场文书
cf战队收人口号
2014/06/21 职场文书
2016年安全月活动总结
2016/04/06 职场文书
Java 通过手写分布式雪花SnowFlake生成ID方法详解
2022/04/07 Java/Android
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS