一丶什么是python静态数据类型?
在python中,类型是在运行过程中自动决定的,而不是通过代码声明.
二丶变量丶对象丶引用
变量创建:python代码运行之前先检测变量名
变量类型:变量永远不会有任何和他相关的类型信息或者约束
变量使用:当变量出现在表达式中时,它会马上被当前引用的对象所代替,无论对象是什么类型.
例如: a = 3有如下三步:
1.创建一个对象代表值为3 术语:对象是分配的一块内存,有足够的空间去表示它们所代表的值
2.创建一个变量a,如果它还没有创建的话 术语:变量是系统表的元素,拥有指向对象的连接的空间
3. 将变量与新对象连接. 术语:引用是自动形成的从变量到对象的指针
引用是一种关系,以内存中的指针形式实现
python缓存了小的不可变数据类型,用于复用.
三丶类型属于对象而不是变量
a = 1 整数型
a = "1" 字符串
a = 1.1浮点型
看似a的类型在变,实际上变的只是对象类型,变量就是在特定时间引用了一个特定的对象.从而显示出不同的类型
每个对象都有头信息,来标注对象的类型
四丶 对象的垃圾收集
在每个对象中有一个计数器,计数器记录了当前指向该对象引用的数目,一旦为零这个对象就会被回收.
a = 1 整数型
a = "1" 字符串
a = 1.1浮点型
每当一个变量名被赋予了一个新的对象,之前那个对象占用的空间就会被回收(如果没有被其他变量名或对象所引用的话),这种回收对象空间的技术叫做垃圾收集
好处就是不用考虑底层代码,内存自动释放
五丶共享引用
(1)情况一
a = 1 ; b=a 多个变量名引用同一个对象.
(2)情况二
a = 1; b = a; a = "gg"
(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"