Python3_变量

变量的概念

  • 变量在第一次赋值时被创建
  • 变量在表达式中被调用时会被替换为它的值
  • 变量在表达式中被调用之前必须已经被赋值
  • 变量应用对象,而且从不需要事先说明

变量从创建的流程

我们来解释一下变量创建的流程,使用 a = 3 来进行解释

1、创建一个对象来代表值3

2、如果内存中不存在变量 a 则进行创建

3、将变量与新的对象3进行连接


变量的命名规则

  • 变量名只能有字母、数字、下划线组成,且不能以数字开头
  • 变量名不能是 Python 的关键字,最好不要和 Python 内置的东西重复
  • 变量名的选取尽量要有意义,要一看就明白该变量指代的内容
  • 当有多个单词连接变量的时候要使用下划线进行连接

垃圾回收机制

先来看两行代码:

>>> a = 3
>>> a = "spam"

通过上面两行代码,可以引申出一个问题:我们先给变量a赋值了一个3,在给变量a赋值了一个字符串spam,那么我们之前给a赋值的3在我们又给a赋值了一个spam后发生了什么?

答案是,在Python中,每当一个变量名被赋予一个新的对象,如果原来的对象没有被其他的变量名或对象所引用的话,那么之前的对象所占用的内存空间就会被回收。


共享引用

>>> a = 3
>>> b = a

当我们运行赋值语句 b = a之后,变量b就成为对象3的一个引用,在内部,变量实际上时一个指针指向了对象的内存空间,该内存空间是通过运行字面量表达式3创建的。这种情况在Python中称为共享引用,即多个变量名引用了同一个对象;值得注意的是变量a和变量b此时没有彼此关联,真实情况是这两个变量通过它们的引用指向了同一个对象。

>>> a = 3
>>> b = a
>>> print(b)
3
>>> a = 4
>>> print(b)
3

通过上面的例子可以看出来,当我们将a的值进行改变的时候,b仍然不会改变;因为这时Python会重新划分一个内存空间链接到a,所以b并不会有什么影响。

关于列表的共享引用

>>> L1 = [1, 2, 3]
>>> L2 = L1
>>> print(L2)
[1, 2, 3]
>>> L1[0] = 0
>>> print(L2)
[0, 2, 3]

可以发现L2随着L1的变化而发生了变化,这是因为L2指向的是L1的整个列表,而并非某一个元素,所以会按照L1的变化而发生变化;如果要避免这中情况可以使用copy对象而不是使用引用;如:

>>> L1 = [1, 2, 3]
>>> L2 = L1[:]
>>> L1[0] = 0
>>> print(L2)
[1, 2, 3]

is运算符和==运算符

需要注意的是==运算符是测试两个被引用的对象是否具有相同的值;而is运算符是测试两个变量是否指向同一个内存地址。

>>> L01 = [1, 2, 3]
>>> L02 = [1, 2, 3]
>>> L01 == L02
True
>>> L01 is L02
False

转载于:https://www.jianshu.com/p/80111b2917d9

猜你喜欢

转载自blog.csdn.net/weixin_34360651/article/details/91121580
今日推荐