一丶什么是python静态数据类型?

在python中,类型是在运行过程中自动决定的,而不是通过代码声明.

二丶变量丶对象丶引用

变量创建:python代码运行之前先检测变量名                     

变量类型:变量永远不会有任何和他相关的类型信息或者约束               

变量使用:当变量出现在表达式中时,它会马上被当前引用的对象所代替,无论对象是什么类型.

例如: a = 3有如下三步:  

1.创建一个对象代表值为3                             术语:对象是分配的一块内存,有足够的空间去表示它们所代表的值

2.创建一个变量a,如果它还没有创建的话     术语:变量是系统表的元素,拥有指向对象的连接的空间

3. 将变量与新对象连接.                                 术语:引用是自动形成的从变量到对象的指针

iOS 如何获取引用的动态库 动态引用数据_变量名

 

引用是一种关系,以内存中的指针形式实现

python缓存了小的不可变数据类型,用于复用.

 

三丶类型属于对象而不是变量

a = 1    整数型

a = "1" 字符串

a = 1.1浮点型

看似a的类型在变,实际上变的只是对象类型,变量就是在特定时间引用了一个特定的对象.从而显示出不同的类型

每个对象都有头信息,来标注对象的类型

 

四丶 对象的垃圾收集

在每个对象中有一个计数器,计数器记录了当前指向该对象引用的数目,一旦为零这个对象就会被回收.

a = 1    整数型

a = "1" 字符串

a = 1.1浮点型

每当一个变量名被赋予了一个新的对象,之前那个对象占用的空间就会被回收(如果没有被其他变量名或对象所引用的话),这种回收对象空间的技术叫做垃圾收集


好处就是不用考虑底层代码,内存自动释放

 

五丶共享引用

(1)情况一

a = 1 ; b=a 多个变量名引用同一个对象.

iOS 如何获取引用的动态库 动态引用数据_iOS 如何获取引用的动态库_02

(2)情况二

a = 1; b = a; a = "gg" 

iOS 如何获取引用的动态库 动态引用数据_变量名_03

(3)情况三

a = 3 ; b = a; a = a + 3 结果同上

 

六丶共享引用和在原处修改

l1 = [2,3,4] ; l2 = l1 ; l1[0] = 24 ;结果为l1=l2=[24,3,4]

运用切片复制就会创建一个新的对象.l2 = l1[:]

字典用copy()方法来复制

 

七丶共享引用和相等

is(查看内存是否相等)严格意义的相等和==(查看值是否相等)相等

sys模块的getrefcount()方法来查看引用计数

 

练习:

1.会改变A打印的值吗?N

A = "aaaaa"

B = A

B = "bbbbb"

2. 会改变A打印的值吗?Y

A = ["aaaaa"]

B = A

B[0] = "bbbbbb"

3.会改变A打印的值吗?N

A = ["aaaaaa"]

B = A[:]

B[0] = "bbbbbb"