01、变量和常量

2019-06-04  本文已影响0人  唐_sri

变量

变量的概念

变量从创建的流程

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

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

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

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

变量的命名规则

垃圾回收机制

先来看两行代码:

>>> 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]

常量

常量中程序的整个生命周期内都不能发生变化,Pyhon没有内置的常量类型,但通常使用全大写的来指明该变量为常量,在程序中不应对其进行修改。

is运算符和==运算符

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

>>> L01 = [1, 2, 3]
>>> L02 = [1, 2, 3]
>>> L01 == L02
True
>>> L01 is L02
False
上一篇 下一篇

猜你喜欢

热点阅读