Python 初学(3)

来源:互联网 发布:JS在区间内取随机数 编辑:程序博客网 时间:2024/05/21 19:42

动态类型简介

  如果你有学习静态编译类型语言CC++Java的背景,学到这里你也许会困惑。到目前为止,我们使用变量时,都没有声明变量的存在和类型,但是变量还可以工作。

  当你开始问这样的问题的时候,就进入了Python动态类型模型的领域。在Python中,类型是在运行过程中自动决定的。这意味着没有必要事先声明变量(这个概念实质上对变量,对象和他们直接的关系都适用)

变量、对象和引用

    就像之前学习的例子一样,当在Python中运行赋值语句 a=3时,即使没有告诉Pythona作为一个变量来用。

  变量创建

  一个变量(也就是变量名),就像a,当代码第一次给它赋值时就创建了它,之后的赋值会改变已创建的变量名的值。

  变量类型

  变量永远不会有任何和它关联的类型信息或约束。类型的概念是存在与对象中而不是变量名中。变量原本是通用的,它只是在以供特定的时间点,简单的引用了一个特定的对象而已。


  变量a在第一次赋值时是整数,第二次给他赋值时是字符串,变量名并不存在特定的类型。

  Python 完成 a=3 将执行3个不同的步骤去完成这个请求。

  1,创建以供对象代表值3

  2,创建以供变量a,如果它还没有创建的话。

  3,将变量与新的对象3相连接。

  注意这里指向的是一个代表3的对象,而不是其他语言那样,开辟一个内存空间存放数字3


Python中从变量到对象的连接称作引用。也就是说,引用是一种关系,以内存中的指针形式实现。一旦变量被使用,Python会自动跟随这个变量到对象的连接。


对象的垃圾收集

    前面我们尝试过给变量a,多次赋值,a只连接到最近的一次赋值的对象。那么之前的对象呢?每次赋值都会创建一个对象的。实际上,每当一个变量名被赋予了一个新的对象,之前的那个对象所占用的空间就会被回收(如果它没有被其他的变量名或对象所引用的话)。这种自动回收对象空间的技术叫做垃圾收集。

共享引用

  到现在为止,我们已经看到了单个变量被赋值引用多个对象的情况,现在在交互模式下,引入另一个变量,并看一下变量名和对象的变化:

  可以看到,a变了,b还是3。这中间的关系可以参考下面两幅图来理解。


  可以这样理解,只要产生了新的对象,那边a必然不会一样。如果不产生新的对象那么ab还是一样的。

参见下面列表的例子:

  

  当我们改变列表的某个元素时,a,b所引用的内容还是一致的,关键就在于列表的可变性。改变了之后,列表还是那个列表,只不过它里面的东西变了。

 工作日,学习的时间少,今晚就学这些。

0 0