第六章 动态类型简介

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第六章 动态类型简介相关的知识,希望对你有一定的参考价值。

#1.
#A:在python中,类型属于对象而非变量名,每一个对象有两个标准头部信息:一个类型标示符,一个引用的计数器(python中的垃圾收集主要基于引用计数器)
#B:在python中,每当一个变量名被赋予一个新对象时,之前那个对象若没有被别的变量名或对象引用的话,那么其占用内存就会被释放,这种计数被称为垃圾收集
#C:在python中,变量总是一个指向对象的指针,而不是可改变的内存区域的标签,给变量赋一个新的值,并不是替换了原始的对象,而是让这个变量去引用了另一个完全不同的对象

#2.sys模块getrefcount()可以得到对象的引用次数
import sys
value = sys.getrefcount(1)          #value = 396
listTem = []
value = sys.getrefcount(listTem)    #value = 2
value = sys.getrefcount([])         #value = 1

#3.
v0 = sys.getrefcount(1)             #v0 = 397
value0 = 1
v1 = sys.getrefcount(1)             #v1 = 398
value1 = 1
v2 = sys.getrefcount(1)             #v2 = 399
value0 = 2                          #value0 = 2 value1 = 1
v3 = sys.getrefcount(1)             #v3 = 398
#上述代码:value0首先是对象1的引用,而后value1也成为对象1的引用,而后value0指向了其他对象,导致对象1的引用计数减小,但是对象1本身没有变化,所以指向对象1的value1也没有变化

listTem = [1, 2, 3]
v0 = sys.getrefcount(listTem)       #v0 = 2
listTem0 = listTem;                 #listTem0 = [1, 2, 3]
v1 = sys.getrefcount(listTem)       #v1 = 3
listTem1 = listTem;                 #listTem1 = [1, 2, 3]
v2 = sys.getrefcount(listTem)       #v2 = 4
listTem0 = 1;                       #listTem0 = 1 listTem1 = [1, 2, 3]
v3 = sys.getrefcount(listTem)       #v3 = 3
listTem1.append(10)                 #listTem1 = [1, 2, 3, 10] listTem = [1, 2, 3, 10]
#上述代码:listTem0,listTem1指向了listTem所指向的列表对象,导致listTem所指向的列表对象的引用计数增加了2次,后来listTem0指向了另一个对象,导致listTem所指向的对象的引用计数减一
#再后来listTem1改变了listTem所指向对象的内容,这就反映到了listTem上,导致listTem也一起发生了变化

  

以上是关于第六章 动态类型简介的主要内容,如果未能解决你的问题,请参考以下文章

仿牛客网第六章

第六章:异常机制

第六章 数组

2017.2.28 activiti实战--第六章--任务表单动态表单(待)

JAVA-初步认识-第六章-类类型参数

第六章循环结构进阶