栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

从节约来理解python变量是什么

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从节约来理解python变量是什么

前言

先声明,是个人理解,不到位之处,是我个人问题。
先讲一个故事,很久很久以前有一个穷人,半辈子没发财,但是穷困半辈子,他学会穷的道理,并且悟出”省“的规律,如何利用有限的资源维持自己的生命,简单来说就是一物多用。
一块布,不仅仅是抹布同时还是洗碗布、毛巾。
再抽象说明:一块布是一个实体,而抹布、洗碗布、毛巾都是一个实体外在名称而已。
再抽象就是实体和引用的关系。

文章目录
  • 前言
  • 1、python等号本质。
  • 2、变量存放是指向地址,基础类型存放是内容,相同内容的变量指向地址是一样的。
  • 3、列表、集合、字典、类对象是指向地址的变量。
  • 4、参考
  • 总结

1、python等号本质。

在python中,一切都是对象。对象均具备三个属性:地址,类型,值

	a = 1

数字1是一个实体,a是一个变量。
继续讲故事。
一天,程序入职一家大公司python,刚来先找公司解决住宿问题,于是到找脸黑的后勤部小经理系统说,”我需要一块洗碗布,麻烦放在厨房挂架上“。
系统觉得小事一件,高校毕业的新人,总是不太知道人与人相处之道。于是让人找了一块布过来并挂上去。然后走到程序跟前正儿八经说道:”这是一块抹布,给你放在挂架上了“。程序觉得怪怪,办完事就走呗,还跟我嘀咕什么放在那里了。
故事先讲一段,a=1执行后,系统做了下面事情过程如下:
于是在变量内存块创建a,然后看下实体内存块有没有1数值。如果有,就把1的内存地址传存到a;如果没有,就整个1出来,然后把地址存到a。后面遇到需要基本类型的数据都是这样操作。

	a = 1
	print(id(1)) # 1549269926128
	print(id(a)) # 1549269926128


继续讲故事,第二天,程序找到系统要一块抹布擦桌子,系统找自己手下要来程序的配给的物资清单。

物资名称物资
洗碗布一块布

发现程序已经有了一块布——洗碗布,系统心想,抹布也就是布。系统说,”“你先回去,回头告诉你抹布在那里“,”难道房间里原来就有了”,程序也没多想,就先去工作了,看着程序走远,这时系统在物资清单上,左栏加了抹布,然后还画了一条虚线和之前”一块布“连起来。

物资名称物资
洗碗布一块布
抹布同上
	a = 1
	b = 1
	print(id(a)) # 1549269926128
	print(id(b)) # 1549269926128


程序忙完一天回到宿舍,真看到了系统说的抹布,不过是洗碗布上贴了小字条,歪歪斜斜写着“抹布”。
这时候程序嘴都气歪了,这不是寒碜人吗?正准备找经理说理去,刚走到门外,发现宿舍对面的老王,用跟他一样的洗碗布正在淡定擦桌子,擦完拿去洗碗去了。
这时候程序冷静下来,回到宿舍,难道这是公司的环保理念,拿来考验新员工。一夜无眠,心想去摸摸底,看看怎么回事,于是一赶早找到经理系统办公前台,说要一卷纸上厕所用的。
系统按例看了程序的物资清单,看完心想一块布可不能当厕纸,布和纸是两回事。于是填了物资清单,仓库拿出一卷纸,递过去。

物资名称物资
洗碗布一块布
抹布同上
厕纸一卷纸
	a = 1
	b = 1
	c = 2
	print(id(a)) # 1549269926128
	print(id(b)) # 1549269926128
	print(id(c)) # 1549269926160

程序看着手中的纸,感觉特别怪异,软硬适中,感觉除了擦屁股以外,可能还有其他用途,可能也是想多了。
晚上又失眠了,回想之前一幕幕,感觉冥冥中指向一个真相,真相可能就是那张物资清单的内容。但是需要求证,于是赶早了又来前台,这次要东西多了一点,写了一个清单(一块毛巾、一本计算簿和一支圆珠笔)。
接过清单,经理系统习惯抽出程序的物资清单,想了想,然后写写画画的一顿操作,结果非常满意。放下物资清单反盖桌上,就喊人取物资来,愣是没人过来。想想算了,站起来径直走向仓库去拿物资。
看着系统去了仓库,程序立马把物资清单翻过看,一看头发都竖起来了。

物资名称物资
洗碗布一块布
抹布同上
毛巾同上
厕纸一卷纸
计算薄同上
圆珠笔一支笔
a=1 
b=1
c=2
list1=[1,2,3]
print(id(a)) # 1549269926128
print(id(b)) # 1549269926128
print(id(c)) # 1549269926160
print(id(list1[0])) # 1549269926128
print(id(list1[1])) # 1549269926160
print(id(list1[2])) # 1513591996720
print(id(list1))  # 1513596904640


系统仓库回来看见程序一脸怒气盯着他,程序也看到系统手里就拿了一支笔。这下什么都明白了。气急败坏骂道:“真是一物多用,反正能用就行了是吧,厕纸也是计算簿,毛巾就是一块布,我要投诉你!我要找总经理投诉你!”
系统淡淡说到,我就是总经理。
故事讲完了。

2、变量存放是指向地址,基础类型存放是内容,相同内容的变量指向地址是一样的。

在python里,所有基础数据 (整型、浮点型、字符串数值)创建后供变量引用其地址,就像a=1,b=1, a和b都是指向数值1的地址,变量名称变了,只要是实体一样都是指向同一个地址,如果没有明确定义的话。

a=1
b=1
c=2
print(id(a)) # 1549269926128
print(id(b)) # 1549269926128
print(id(c)) # 1549269926160
a=2
print(id(a)) # 1549269926160

这种做法节约内存空间,从老祖宗C到C++都是这样玩的,其他语言没考证过,不过应该差不到那里去。

3、列表、集合、字典、类对象是指向地址的变量。

在python中列表、集合、字典、类对象这些变量都是指向地址,都是指向构成他们基础类型数据实体的一片地址,是一种容器指向地址,如果是间接地址,那通过间接地址找到基础类型数据实体地址。

4、参考

Python 类,对象,数据分类,函数参数传递详解


总结

不管再怎么举例子,讲故事,都是只能是类比过程,永远没有实际运行程序看到结果贴切,但是如果真的没办法理解,造就很难记忆,找个临时替代理解还是有可取之处,自己认识也很肤浅,比喻不到位,且当我个人一些学习思路方向记录,聊以自慰。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/884009.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号