01、变量和常量

变量

变量的概念

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

变量从创建的流程

我们来解释一下变量创建的流程,使用 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]

常量

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

is运算符和==运算符

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

>>> L01 = [1, 2, 3]
>>> L02 = [1, 2, 3]
>>> L01 == L02
True
>>> L01 is L02
False
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,846评论 0 10
  • 变量 image.png 标准数据类型Python中有六个标准的数据类型:类型释义Number数字String字符...
    Lv_0阅读 474评论 0 1
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,148评论 1 32
  • Python语言特性 1 Python的函数参数传递 看两个如下例子,分析运行结果: 代码一: a = 1 def...
    伊森H阅读 3,089评论 0 15
  • 习惯了自己在多方面思考问题之后,又陷入了过多关注自己的思考,没把别人思考的内容串在自己思维链上的大坑。还好生活会经...
    谦堆雪阅读 138评论 0 0