变量、对象和引用

就像已经使用过的很多例子一样,当在Python中运行赋值语句a = 3时,即使没有告诉Python将a作为一个变量来使用,或者没有告诉它a应该作为一个整数类型对象,一样都能工作。在Python语言中,这些都会以一种非常自然的方式完成,就像下面这样。

变量创建

一个变量,也就是变量名,就像是a,当代码第一次给它赋值时就创建了它,之后的赋值将会改变已创建的变量名的值。从技术上来讲,Python的代码在运行之前先检测变量名,但你可以理解为最初的赋值操作在创建变量。

变量类型

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

变量使用

当变量出现在表达式中时,它会马上被当前引用对象所代替,无论这个对象是什么类型。此外,所有的变量必须在使用前被明确地赋值,使用未赋值的变量会产生错误。

总而言之,变量在赋值的时候才被创建,它可以引用任何类型的对象,并且必须在应用之前赋值。这意味着,不需要通过脚本声明所需要的使用的名字,但是,必须初始化名字才能更新它们。

这种动态类型模式与传统语言的类型模式相比有明显的不同。刚入门时,如果清除地将变量名和对象划分开,动态类型是很容易理解的。

例如:

1.创建以后对象代表值3

2.创建一个变量a,如果它还没有创建的话

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

在Python中变量到对象的连接称为引用。也就是说,引用是一种关系,通过内存中的指针的形式来实现。一旦引用变量,Python会自动跟踪这个变量到对象的连接。这实际上比术语所描述的要简单的多,以具体是术语来讲

变量是一个系统表的人口,包含了指向对象的连接

对象是被分配到的一快内存,有足够的空间去表示他们所代表的值

引用是自动形成从变量到对象的指针

在程序中,每一次通过运行一个表达式生成一个新的值,Python都创建了一个新的对象表示这个值。从内部来看,作为一种优化手段,Python缓存了这一类不可变对象并对其进行复用。

例如,小的整数和字符串(每一个0都不是一块真正的、新的内存块)。但是从逻辑的角度来看,这工作起来就像每一个表达式结果的值都是一个不同的对象,而每一个对象都是不同的内存

从技术上讲,对象不仅仅有足够的空间表示他的值,还包括了更复杂的结构。每一个对象都有两个标准的头部信息:类型标志符标识了这个对象的类型,引用计数器决定了何时回收这个对象。

你可能感兴趣的:(变量、对象和引用)