Python基础 - Python变量

使用Python变量操作数据

Posted by 王富杰 on Wednesday, December 25, 2024

一、 变量的基本使用

变量是存储数据的标识符, 用来存储数据。在使用变量中应该遵循先定义再使用的原则。变量的定义语法如下:

变量名 = 数据

在Python语言中定义变量不需要指定类型,因为Python属于动态语言。与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配就会报错。这也是Python使用起来很灵活的原因之一。

1.1、变量的命名规则

变量在程序中就是用一个变量名表示,变量名需要遵循以下原则。

  1. 必须是大小写英文、数字和_的组合,且不能用数字开头,比如:myname是合法变量名。但是11a不是一个合法的变量名。
  2. 在给变量命名的时候最好做到见名知意,在Python中一般使用小写字母命名变量。
  3. 变量不能使用Python内置的关键字。例如变量名不能使用 print。
  4. 一个单词无法表示变量可以使用多个单词用下划线拼接,例如 first_name。
  5. Python推荐下划线命名法,不推荐驼峰命名法,这与Python的内建函数类的命名风格保持一致。

1.2、变量的使用示例

以下是一个使用变量的Python示例:

myname = "wfj"
print(myname)

print(myage)  # 程序运行到这行代码就会报错,原因myage变量没有定义就直接使用,不符合先定义后使用的原则

二、变量的内存管理

上一章节使用了变量,定义完变量是在内存里开辟了一个内存空间存储数据"wfj",然后把这个数据绑定给变量名myname。因为计算机的内存是有限的,如果程序只使用内存不做释放最终就会把内存撑爆,这就是内存溢出。在C语言中,内存是由开发者来管理,手动申请和释放,一旦使用不当就会造成程序崩溃。但是在Python中为了简单易用,推出了一个内存管理机制,即垃圾回收机制。

2.1、垃圾回收机制

Python内置了垃圾回收机制来管理内存,那什么属于垃圾呢?Python的定义是没有关联变量名的值就属于垃圾。例如"wfj"绑定了myname变量,即可以通过myname来引用它,那它就不是垃圾。这里引出一个概念叫引用计数,即一个内存空间上捆绑了几个变量。

引用计数的增加

a = 100
b = a
c = a

这个实例中,定义了变量a绑定了值100,即申请了一个内存空间存储100这个值。然后变量a指向这片内存空间,b和c再指向了a,此时值100的引用计数就是3.

引用计数的减少

del a
del b
c = 123

del 是解除变量名和值的引用关系,这个示例执行后那100上的引用计数就变成1了。在执行c = 123后,将变量c重新绑定到了值123的内存空间上,那么值100的引用计数就变为0了,此时它就成了垃圾需要回收。Python的垃圾回收机制不需要人工操作,它会定期扫描内存来自动进行垃圾回收。

三、 变量的id与type

id和type是变量值的两大特征。id是根据变量的内存地址计算出的一个id号码,它并不是实际的内存地址。 type是变量值的类型,例如名字我们使用字符串"wfj"来存储,年龄使用数字28存储。这里就引出了数据类型的概念,后续我们会对数据类型进行详细解释。

>>> myname = "wfj"
>>> age = 73
>>> print(id(myname))
140234269543312
>>> print(type(myname))
<class 'str'>
>>> print(type(age))
<class 'int'>

如上实例,我们可以看到myname的类型是 str, age的类型是int。

四、判断变量是否相等

判断变量是否相等有两种方式 is 和 运算符 ==。 首先 is 是身份运算,用来比较两个变量的身份是否相等。上边我们说了变量的身份就是变了的 id 号,因此is是用来比较两个变量的id是否相等。== 运算符是比较两个变量的值是否相等。

>>> a = "王富杰"
>>> b = "王富杰"
>>> id(a)
140234269548784
>>> id(b)
140234269548976
>>> a == b
True
>>> a is b
False

如上实例,定义的两个变量 a 和 b。值一样,但是他们的id不一致,说明他们是两个不同的内存空间。因此 == 判断返回的是True,使用 is 判断返回的是 False。如果在pycharm中运行,结果可能和示例不一致,原因pycharm做了优化。

五、小整数池

第四章节我们看到只要有赋值操作,产生了新的值就会产生新的内存空间。接下来我们再看一个示例:

>>> a = 10
>>> b = 10
>>> id(a)
140234268690624
>>> id(b)
140234268690624
>>> a is b
True

发现这个示例和前一章节说的结论不一致。原因是重复申请内存空间会带来效率问题,Python为了优化,提出了小整数池的概念。为了避免创建相同的值而重复申请内存空间带来的效率问题,Python解释器会在启动的时候创建出小整数池,范围是 -5 到 256。这些小整数在启动后就被创建在内存空间中,永远不会被垃圾回收机制回收。

Python解释器不止有小整数池,常见的字符串如 a b c等也做了一样的优化。在pycharm中做了进一步优化扩大了小整数池的范围,此处做了解即可。

「真诚赞赏,手留余香」

WangFuJie Blog

真诚赞赏,手留余香

使用微信扫描二维码完成支付