深入浅析Python中动态类型的实现原理

介绍

这篇文章将为大家详细讲解有关深入浅析Python中动态类型的实现原理,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

在Python中,我们使用变量时,并没有声明变量的存在和类型。类型是在运行过程中自动决定的。

=3

Python将会执行三步去完成上面这个请求。

1。创建一个对象代表3

2。创建一个变量,如果一个未创建。

3。将变量一个与对象3相连接。

可以将变量一看作对象3的一个引用。

=3
b=

多个变量可以指向同一个对象,在Python中叫共享引用。

Python在每个对象中保持了一个计数器,用于记录当前指向该对象的引用的数目,一旦计数器被设置为0,该对象的内存空间就会自动回收。

<强>原处修改对象

由于共享引用的存在,有一些对象和操作会在原处修改对象。

Python中对象可分为可变类型对象和不可变类型对象。

可变对象:列表,字典

不可变对象:数字,字符串,元组

如果变量是不可变对象的引用,对变量名的修改不会影响其他变量,而是直接连接到修改的对象。

=3
b=
打印(a) # 3
打印(b) # 3

=4
打印(a) # 4
打印(b) # 3

如果变量是可变对象的引用,对变量名的修改会影响其他变量。

=(1、2、3)
b=
打印(a) # (1、2、3)
打印(b) # (1、2、3)

[0]=4
打印(a) # (4、2、3)
打印(b) # (4、2、3)

<强>拷贝

所以当你需要创建一个与原列表一样同时又独立于原列表的列表时,可以使用拷贝。

下面介绍最常用的两种。

=(1、2、3)
b=[:]
打印(a) # (1、2、3)
打印(b) # (1、2、3)

[0]=4
打印(a) # (4、2、3)
打印(b) # (1、2、3)

此b引时用的是一所引用的对象的拷贝。,b指向不同的内存区域。

在字典和集合中,无法使用这种方法。

可以使用标准库中复制的模块

进口副本a=[1, 2, [3]]
b=copy.copy (a) #浅拷贝
c=copy.deepcopy (a) #深拷贝

[0]=0
[1] .append (4)

打印(a) # (0, 2, [3,4]]
打印(b) # (1、2、[3,4]]
打印(c) # [1, 2, [3]]

关于深入浅析Python中动态类型的实现原理就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。

深入浅析Python中动态类型的实现原理