Python变量与动态数据类型

来源:互联网 发布:将软件添加到磁贴 编辑:程序博客网 时间:2024/06/14 06:51

变量与动态数据类型

变量与对象

x=5

Python执行上面一句代码时分为三步

1:创建代表整数5的对象(所有数据都以对象方式存在)

2:检查变量x是否存在,若不存在则创建

3:简历变量x到对象5的引用(引用实质上就是指针)

Python中使用变量,应该理解:

变量第一次赋值时被创建,再次出现直接使用

变量没有数据类型概念,数据类型属于对象,类型决定了对象在内存中的存储方式。

变量引用了对象。当在表达式中使用变量时,变量立即被其引用的对象替代,所以变量在使用之前必须赋值

>>>x=5>>>print(x+3)   #执行时变量x被对象5替代,语句实际为print(5+3)8

对象的垃圾回收

在对象没有任何引用时,其占用的内存空间会自动被回收--成为自动垃圾回收。在内部,Python为每个对象创建一个计数器,计数器记录对象的引用次数。当计数器为0是,对象被删除,其占用的内存被回收。

>>> x=5>>> type(x)  #实际执行的是type(5),因此类型是int<class 'int'>>>> x=1.5>>> type(x)  #此时对象5已被回收,执行的是type(1.5),因此类型是float<class 'float'>>>> x='abc'>>> type(x)  #此时对象1.5已被回收,执行的是type('abc'),因此类型是str<class 'str'>>>>

变量命名规则

变量支持以下划线或字母开头,后面接任意数量的下划线、字母、数字。Python3.x支持Unicode字符,因此汉子也可作为变量名。

以下为Python保留字

and del For is raise assert elif from lambda return break else global not try class except if or while continue exec import pass with def finally in print yield

使用惯例

前后有下划线的变量名通常为系统变量,例如,_name_、_doc_都是系统变量以一个下划线开头的变量(如_abc)不能被from...import *语句从模块导入。以两个下划线开头、末尾无下划线的变量(如__abc)是类的本地变量。

赋值语句

简单赋值

x=100

序列赋值

序列赋值指“=”左侧是元组、列表表示的多个变量名,右侧是元组、列表或字符串等序列表示的值。序列赋值可以一次性为多个变量赋值。Python顺序匹配变量名和值。

>>> x,y=1,2  #使用省略圆括号的元组赋值>>> x,y(1, 2)>>> x1>>> (x,y)=(10,20)  #使用元组赋值>>> x,y(10, 20)>>> [x,y]=[30,'abc']  #使用列表赋值>>> x,y(30, 'abc')>>>

当“=”右侧为字符串时,Python会将字符串分解为单个字符,以次赋值给各个变量,此时变量个数和字符个数必须相等,否则出错。

>>> (x,y,z)='abc'   #使用字符串赋值>>> x,y,z('a', 'b', 'c')>>> ((x,y),z)='ab','cd'  #使用嵌套的元组>>> x,y,z('a', 'b', 'cd')>>>

可以在变量名之前使用“*”,为变量创建列表对象引用。此时,不带星号变量匹配的一个值,剩余的值作为列表对象。

>>> x,*y='abcd'  #x匹配第一个字符,剩余字符作为列表匹配y>>> x,y('a', ['b', 'c', 'd'])  >>> *x,y='abcd'   #y匹配最后一个字符,剩余字符作为列表匹配x>>> x,y(['a', 'b', 'c'], 'd')>>> x,*y,z='abcde'>>> x,y,z('a', ['b', 'c', 'd'], 'e')>>> x,*y=[1,2,'abc','汉字']>>> x,y(1, [2, 'abc', '汉字'])>>>

多目标赋值

多目标赋值指用连续的多个“=”为变量赋值

>>> a=b=c=10  #多目标赋值>>> a,b,c(10, 10, 10)>>>

注意这里作为值的证书对象10在内存中只有一个,变量a、b、c引用同一个变量

变量的共享引用

共享引用指多个变量引用了同一个对象。例如:

>>> x=5>>> y=x  #实际执行y=5,余变量x同时引用证书对象5>>> x,y  #(5, 5)>>> x=6  #变量x引用新的对象6,这里并不影响y的引用>>> x,y(6, 5)>>>

从上面的代码可以看出,将变量赋值给另一个变量时,将会使两个变量引用同一个对象。对变量富裕新的值,会使变量引用新的对象,原来的引用被删除。

给变量共享引用时,如果修改了被引用的对象,意味着所有引用对象的变量获得的将是改变后的对象的值。例如:

>>> x=[1,2,3]  #使y和x引用同一个列表对象[1,2,3]>>> y=x>>> x,y([1, 2, 3], [1, 2, 3]) #y和x的输出相同>>> x[0]=6   #通过变量x修改列表对象的第一项>>> x,y([6, 2, 3], [6, 2, 3])  >>>x is yTrue>>>>>> x=[1,2,3]  #使y和x引用同一个列表对象[1,2,3]>>> y=x>>> x,y([1, 2, 3], [1, 2, 3])>>>x is yTrue>>> y=[4,5,6]  #变量y引用新的对象[4,5,6],这样就不影响x的使用>>> x is yFalse>>> x,y([1, 2, 3], [4, 5, 6])>>>>>> x=[1,2,3]>>> y=[1,2,3] #两个[1,2,3] 并不是一个对象>>> x is yFalse>>>

原创粉丝点击