Python笔记7

来源:互联网 发布:windows账户有什么用 编辑:程序博客网 时间:2024/06/02 05:33

动态类型简介

1.变量、对象和引用

a = 3

变量创建

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

变量类型

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

变量使用

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

比如a = 3, 从概念上说, Python会执行三个不同的步骤去完成这个请求:

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

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

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

在Python中 从变量到对象的连接称作引用, 也就是说, 这是一种关系, 以内存中的指针的形式实现。变量是一个系统表的元素, 拥有指向对象的连接空间,对象是分配的一块内存, 有足够的空间去表示他们所代表的值。引用是自动形成的从变量到对象的指针。

Python中每当一个变量名被赋予了一个新的对象, 之前的那个对象所占用的空间就会被回收(如果它没有被其他的变量名或对象所引用的话), 这种自动回收对象空间的技术叫做垃圾收集。在其内部Python是这样实现这一功能的: 它在每个对象中都保持了一个计数器, 计数器记录了当前指向该对象的引用数目, 一旦这个计数器被设置为0, 这个对象的空间就会自动回收。

共享引用

第一行创建变量a , 并将变量a和对象3连接, 第二行创建变量b, 同样的变量b也成为了对象3的一个引用。这样a 和 b都引用了相同的对象(也就是说指向了相同的内存空间)。

第三行对变量a重新进行了赋值, 创建了一个新的对象‘www’, 并设置a对这个新的对象进行引用。这样并不会改变b的值, b依然引用原始的对象3.

有一些对象和操作会在原处改变对象,如列表操作:

L1 和L2引用了相同的对象, 这里没有对L1进行重新赋值, 而是改变了L1所引用的对象, 因为这个列表对象是与其他对象共享(或被其他对象引用)的,那么这个改变不仅会对

L1产生影响。

如果不希望这种现象发生, 需要Python拷贝对象, 而不是创建引用。如:

对L1进行分片操作时会产生新的列表, 所以L2 为复制出的新的列表,L1和L2两个变量指向了不同的区域, 再对L1进行修改是, 不会影响L2.

同理可以使用 == 和 is 操作符来检测共享引用:

L1 和L2为同一个列表的引用, 两者指向同样的区域。

L2通过L1分片得来, 分片是创建的的列表, L2 和L1 虽然 是元素相同的列表, 但是存储在不同的区域。

原创粉丝点击