序言
1.本文为基础回顾,内容可参考《python学习手册》第六章,但本书不推荐入门
2.关于赋值复制,共享不共享,可变不可变,深浅拷贝,很多人的认识都是稀里糊涂甚至是错误的,即使一些优秀的博文里也依然存在一些问题.
一.变量/变量名
1.在动态语言Python中,变量没有类型,也无需声明类型!而在静态语言如C语言中必须先声明变量类型,例如 int a .
2.要使用变量,必须先赋值,否则Python会认为这个变量没有定义
3.任何变量都可以指向任何类型
例:变量a = 3(数值型); a = 'bird'(字符串);a = [1,2,3,4](列表).......变量b,c,dlasdl........只要是变量都可以指向任何类型
4.变量永远不能指向其他变量,变量只能指向对象(由于函数也是对象,所以变量也可以指向函数,这在后面的高阶函数部分会讲到).
二.对象
1.变量和对象是分离的,对象是内存中储存数据的实体.每个对象都有三个要素:value(值),type(数据类型),id(身份标识或内存地址).
2.类型属于对象,而不属于变量;对象的类型包括:int,float,str,list,tuple,dict,set等
三.赋值过程 以 a = 3 为例:
1.创建一个对象来代表3
2.创建一个变量a
3.将变量与对象相连接
注意:
1.对象在赋值之前就已创建(赋值是在最后一步)
2.变量其实是指向内存中对象的一个指针,是对对象的值的引用.
3.程序运行一旦结束,内存就会直接释放,直到再次运行,但是对象的内存地址(id)不再是原来的id.(涉及python的垃圾回收机制)
四. 对一个变量进行多次赋值
图解题外话
变量没有声明类型,那么输入a = 3的时候,python是如何知道那代表一个整数呢?
是这样的,在python中类型是和对象相关联的,而对象知道自己的类型,因为每个对象都含有两个头部信息,一个是类型标志符,另一个是引用计数器(与回收机制相关)因为变量始终只是在引用对象,所以变量即使没有声明类型,python你也能知道这是什么类型.这就是python灵活优越之处,它将程序员从原来必须要声明数据类型中解放了出来
网友评论