Python基础---变量
2020-12-13 14:01
标签:而在 允许 语法 占用 async 单例 因此 分配 内存 什么是变量: 用来绑定数据对象的标识符 关键字: 查看关键字: 赋值语法: 作用:用于创建变量并将变量绑定(或关联)在一个对象上 说明: 示例: 名词解释: 关联/绑定/引用在python中的含义,变量是没有类型的,关联/绑定/引用都是指变量和一个对象的关联关系 可以通过help(‘__main__‘)来查看当前模块下的数据关联关系 python 的内存管理和引用计数 每个对象都会记录有几个变量引用自身,当引用的数量为0时,则对象被销毁,此种自动化内存管理的方式叫引用计数。 变量的交换绑定 == 比较的是两个对象的内容是否相等,即内存地址可以不一样,内容一样就可以了。这里比较的并非是同一片叶子,可能叶子的种类或者脉络相同就可以了。默认会调用对象的 __eq__()方法。 获取对象的内存地址:id 函数 可以通过如下例子来区分比较下: 可以发现b和a的内存地址是相同的,它们指向同一块内存,因而 is 和 == 的结果都为True。这是因为直接赋值都是赋值的引用,是引用,是引用,重要的事情说三遍。 但如果不是通过引用赋值,而是通过切片赋值呢? 新建对象之后,b 和 a 指向了不同的内存,所以 b is a 的结果为False,而 b==a的结果为True。 在这里,小编提一个问题,b[0] is a[0] 的结果呢? 答案是True。 因为切片拷贝是浅拷贝,列表中的元素并未重新创建。 通常,我们关注的是值,而不是内存地址,因此 Python 代码中 == 出现的频率比 is 高。 但是什么时候用 is 呢? is 与 == 相比有一个比较大的优势,就是计算速度快,因为它不能重载,不用进行特殊的函数调用,少了函数调用的开销而直接比较两个整数 id。而 a == b 则是等同于a.__eq__(b)。继承自 object 的 __eq__ 方法比较两个对象的id,结果与 is 一样。但是多数Python的对象会覆盖object的 __eq__方法,而定义内容的相关比较,所以比较的是对象属性的值。 在变量和单例值之间比较时,应该使用 is。 目前,最常使用 is 的地方是判断对象是不是 None。 下面是推荐的写法: 判断不是None的推荐写法是: Python会对比较小的整数对象进行缓存,下次用的时候直接从缓存中获取,所以is 和 == 的结果可能相同: 而看一下另外一段代码: 原因: Python仅仅对比较小的整数对象进行缓存(范围为范围[-5, 256])缓存起来,而并非是所有整数对象。需要注意的是,这仅仅是在命令行中执行,而在Pycharm或者保存为文件执行,结果是不一样的,这是因为解释器做了一部分优化。 总结 del 语句(del 是 delete 的简写) Python基础---变量 标签:而在 允许 语法 占用 async 单例 因此 分配 内存 原文地址:https://www.cnblogs.com/nlkblog/p/11548549.html一.变量的命名规则:
#合法的变量命名示例:
a a1 b bbb _aaa_ _Abcdvara1b2c2
#不合法的变量命名示例:
1a 123 $ABC +a -b #ab @ab
import keyword
print(keyword.kwlist)
#[‘False‘, ‘None‘, ‘True‘, ‘and‘, ‘as‘, ‘assert‘, ‘async‘, ‘await‘, ‘break‘, ‘class‘, ‘continue‘, ‘def‘, ‘del‘, ‘elif‘, ‘else‘, ‘except‘, ‘finally‘, ‘for‘, ‘from‘, ‘global‘, ‘if‘, ‘import‘, ‘in‘, ‘is‘, ‘lambda‘, ‘nonlocal‘, ‘not‘, ‘or‘, ‘pass‘, ‘raise‘, ‘return‘, ‘try‘, ‘while‘, ‘with‘, ‘yield‘]
二.变量的赋值:
变量名=表达式
变量名1=变量名2=表达式
变量名1,变量名2,...=序列
变量名1,变量名2,...=对象1,对象2...
变量名1,变量名2,...=[对象1,对象2...]
变量名1,变量名2,...=(对象1,对象2...)
a=10 #创建a变量,和整型对象10绑定在一起
b=20
c=a+b #创建变量c,和10+20的计算结果绑定在一起
三.python的自动化内存管理:
a = 10000
b = 20000
a = a + b # 发生了什么?
c = a # 发生了什么?
#a = 10000 内存中创建一个10000对象,用变量a和10000绑定绑定
#b = 20000 内存中创建一个 20000对象,用变量b和20000对象绑
#a = a + b 计算对象a 和 b 的和,创建一个30000的对象,a 解除与10000对象的绑定,重新绑定30000这个对象
#c = a 变量c和变量a绑定同一个对象
#练习:已知有两个变量:a 绑定 10000 b 绑定 20000
#问:在不创建任何新的对象的情况下,如何让a和b 交换绑定的对象?
#方法1:
a = 10000
b = 20000
temp = a #借助第三个变量,经典交换算法
a = b
b = temp
#方法2:序列赋值
a, b = b , a
四.变量的is与==
格式:id(对象)
作用:返回一个对象在内存中的地址>>> a = ["I", "love", "Python"]
>>> b = a
# a的引用复制给b,在内存中其实是指向了用一个对象
>>> b is a
True
>>> id(a)
46381384
>>> id(b)
46381384
# 当然,内容也肯定是相等的
>>> b == a
True
# b通过切片操作重新分配了对象,但是值和a相同
>>> b = a[:]
>>> b is a
False
>>> id(a)
48740680
>>> id(b)
48740680
>>> b == a # 但他们的值还是相等的
True
a is None
a is not None
>>> a = 1
>>> b = 1
>>> a is b
True
>>> a == b
True
>>> a = 257
>>> b = 257
>>> a is b
False
五.变量的删除
作用:用于删除变量,同时删除与对象的绑定关系。如果可能则释放对象
语法:del 变量名