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>>>
- Python变量与动态数据类型
- Python变量与数据类型
- Python的数据类型与变量
- Python变量与数据类型(1)
- Python入门-变量与数据类型
- 1.Python进阶-Python变量与数据类型
- Python学习笔记---变量与数据类型
- python:变量与赋值 基本数据类型
- Python基础——数据类型与变量
- 第一节.Python变量与简单数据类型
- 【学习笔记】Python基础-数据类型与变量
- python 数据类型和变量
- Python变量、数据类型6
- Python变量及数据类型
- python数据类型和变量
- Python数据类型和变量
- python变量数据类型总结
- Python变量和数据类型
- 机器学习笔记之三: 熵
- 使用Maven管理Mybatis项目之pom文件配置
- 使用Docker中的mysql
- IO流的使用
- dao层打jar包运行报错 ibatis.binding.BindingException
- Python变量与动态数据类型
- Servlet笔记
- 正则表达式
- Hbase总结,Hbase安装部署,Hbase shell命令
- 禁用鼠标键盘和桌面不显示鼠标指针
- java-jdbc
- Java消息队列--ActiveMq 实战
- android 打电话
- 漫游jedis-RESP通信实现