第六章 动态类型简介

#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也一起发生了变化

  

时间: 2024-10-12 01:43:56

第六章 动态类型简介的相关文章

《Python 学习手册4th》 第六章 动态类型简介

''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容 (每天看42页内容,可以保证月底看完此书)“重点笔记”“本章习题” - 标题1,二级标题用- 标题2,笔记大纲标题.习题题目- 加粗,16px ''' 重点笔记 : 摘要 动态类型是Python语言灵活性的根源(尤其是其提供的多态性) 一. 缺少类型声明语句的情况 在Python中,类型是在运行过程中自动决定的,而不是通过代码声明. 二. 变量.对

《精通C#》第十六章-动态类型和动态语言运行时-第一节至第四节

在.Net4.0中引入了一个关键字dynamic,这是一个动态类型关键字.Net中还有一个关键字是var,这是一个隐式类型,可以定义本地变量,此时var所代表的实际的数据类型有编译器在初次分配时决定,比如:var a=1:a="aa":此时编译器就会报错,因为var在初次定义是已经被分配为int类型,它无法用于返回值.参数或者类/结构.这个时候就要想到所有类型的父类object,按照继承关系来说,object是所有类型的父类,所以它可以替代所有的类,也就是说:object a=1:a=

Python<9>动态类型简介

动态类型以及它提供的多态性,无疑是Python语言简洁性和灵活性的基础. 一.变量 <1>变量创建 一个变量a,当代码第一次给它赋值时就创建了它,之后的赋值将会改变已创建的变量名的值. <2>变量类型 变量永远不会有任何的和它关联的类型信息或约束.变量原本是通用的,它只是在一个特定的时间点,简单的引用了 一下特定的对象而已. <3>变量使用 当变量出现在表达式中,它会马上被当前引用的对象所替代(对象是有类型的).此外所有的变量必须在使用前明确的 赋值,使用未赋值的变量会

动态类型简介

一.第一个Python程序print('Hello World') 二. 动态类型简介 在学习Python之时,掌握Python编程中最基本的概念是很重要的.动态类型以及由他提供的多态性,是Python语言简洁和灵活的基础. 1. 缺少类型声明语句在Python中,我们使用变量时,没有声明变量的存在和类型(如 int a= 1),但是变量还是在工作,为啥子?其实在Python中,类型是在程序的运行过程中自动决定的,而不是通过代码的声明来决定的.Ps:这个概念对变量.对象和他们之间的关系都适用.

Python动态类型简介

在C语言中使用变量, 需先声明其类型, 如int a = 3, 而Python中直接 a = 3就行, Python怎么知道那代表了一个整数呢? 在Python中类型是在运行过程中决定的, 而不是事先声明的. 像上面Python中运行赋值语句 a = 3, 代码中没有说明a是整数对象类型, 但一样也能工作, 可按如下思路来理解该原由. 变量创建: 一个变量, 就像a, 当代码第一次给它赋值时就创建了它, 之后的赋值将会改变已创建的变量名的值. 变量类型: 变量永远不会有任何的和它关联的类型信息或

Python学习笔记整理(三)Python中的动态类型简介

Python中只有一个赋值模型 一.缺少类型声明语句的情况 在Python中,类型是在运行过程中自动决定的,而不是通过代码声明.这意味着没有必要事声明变量.只要记住,这个概念实质上对变量,对象和它们之间的关系都适用.那么这个概念也容易理解并掌握. 1.变量,对象和引用 变量创建:一个变量,当代码第一次给它赋值时它就被创建了.之后的赋值将会改变已创建的变量名的值.Python在代码运行之前先检测变量名,可以当成是最初的赋值创建变量. 变量类型:变量永远不会有任何的它关联的类型信息或约束.类型的概念

第六章 String类型

1 构造String类型 string str1=new string('c',3); //str1="ccc" char[] chs=new char[]{'c','a','t','o','o','n'}; string str2=new string(chs);//str2="catoon"; string str3=new string(chs,0,3);//str3="cat"; 2 String类的字段.属性和索引函数 --String

静中有动-动态类型

在C#4.0中,最核心的特性莫过于动态类型的引入. 1.动态类型简介 一直在强调C#是一门静态类型的语言,因为它在定义变量时要明确给出变量的类型.例如在int i=5;这样的代码中,int就是变量i的类型,如果定义变量时没有明确指定变量的类型,则这样的代码是通过不了编译的. 在C#4.0中,微软引入了dynamic关键字来定义动态类型.当我们使用由dynamic关键字限制的变量时,编译器并不知道它的类型,该类型只能在程序运行的时候才能被确定.动态类型的定义如下面的代码所示: dynamic i=

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

学习资料:<Activiti实战> 第六章 任务表单(一)动态表单 内容概览:本章要完成一个OA(协同办公系统)的请假流程的设计,从实用的角度,讲解如何将activiti与业务紧密相连. 第四章中讲解了两种表单:动态表单和外置表单的区别.这里将使用不同的表单来完成相同的功能. 1 动态表单:<activiti:formProperty> 2 外置表单:<activiti:formKey>