Python动态类型简介

本网站用的阿里云ECS,推荐大家用。自己搞个学习研究也不错

<

div id=”content” contentScore=”1276″>在python中,类型是在运行过程中自动决定的,而不是通过代码声明。这意味着没有必要事先声明变量。Python是动态类型的,也是强类型语言(只能对一个对象进行适合该类型的有效的操作)。

变量、对象和引用

 

变量在赋值时才创建,它可以引用任何类型的对象,并且必须在引用之前赋值。

a=3

Python将会执行三个不同的步骤去完成这个请求,这些步骤反应了Python语言中所有赋值的操作:

(1)创建一个对象来代表值3;
(2)创建一个变量a,如果它还没有创建的话。
(3)将变量与新的对象3相连接。

在Python中从变量到对象的连接称为引用。

变量是一个系统表的元素,拥有指向对象的连接的空间。
对象是分配的一块内存,有足够的空间去表示它们所代表的值。
引用是自动形成的从变量到对象的指针。

 

垃圾回收机制

 
Python在每个对象中保持了一个计数器,计数器记录了当前只想该对象的引用的数目。一旦这个计数器被设置为零,这个对象的内存空间就会自动回收。垃圾收集最直接的,可高收到的好处就是:这意味着可以在脚本中任意使用对象而不需要考虑释放内存空间。
 

共享引用

 
>>> a=3
>>> b=3
>>> a=“spam”
变量a引用了由常量表达式spam所创建的新的对象,但是变量b仍旧引用原始的对象3,因为这个赋值运算改变的不是对象3,仅仅改变了变量a,变量b并没有发生改变。
在python中,变量总是一个指向对象的指针,而不是可改变的内存区域的标签。给一个变量赋一个新的值,并不是替换了原来的对象,而是让这个变量去完成引用完全不同的一个对象。
 

共享引用与原处修改

 
>>> L1 = [2,3,4]
>>> L2 = L1
>>> L1[0] = 24
 
>>> L1
[24,3,4]
>>> L2
[24,3,4]
在这里,没有改变L1,而是改变了L1所引用的对象的一个元素。这类修改会覆盖列表对象中的某部分。因为这个列表对象是与其他对象共享的,那么一个像这样在原处的改变不仅仅会对L1有影响,而且会影响L2。
 
>>> L1 = [2,3,4]
>>> L2 = L1[:]
>>> L1[0] = 24
 
>>> L1
[24,3,4]
>>> L2
[2,3,4]

这里,对L1的修改不会影响L2,因为L2引用的是L1所引用对象的一个拷贝,也就是说,两个变量指向了不同的内存区域。

 

共享引用和相等

 
“==”操作符测试两个被引用的对象是否有相同的值。
“is操作符“是在检查对象的同一性。
 
>>> L1 = [2,3,4]
>>> L2 = [2,3,4]
>>> L1 == L2
True
>>> L1 is L2
False
 
小的整数和字符串在内存中被缓存并且会被复用。
>>> X = 42
>>> Y = 42
>>> X == Y
True
>>> X is Y
True
 

总结

 
动态类型意味着将写更少的代码,也是python中多态的根本。python中没有对类型进行约束,它具备了高度的灵活性。

推荐阅读:

《Python开发技术详解》.( 周伟,宗杰).[高清PDF扫描版+随书视频+代码] http://www.linuxidc.com/Linux/2013-11/92693.htm

Python脚本获取Linux系统信息 http://www.linuxidc.com/Linux/2013-08/88531.htm

Python 网站文件及数据库备份脚本 http://www.linuxidc.com/Linux/2012-06/62346.htm

Python文件处理:读取文件 http://www.linuxidc.com/Linux/2013-08/88496.htm

如何发布自定义的Python模块 http://www.linuxidc.com/Linux/2013-08/88495.htm

Python爬虫多线程抓取代理服务器 http://www.linuxidc.com/Linux/2013-07/87289.htm

Python中re(正则表达式)模块详解 http://www.linuxidc.com/Linux/2013-08/88588.htm

Python 的详细介绍:<a title=”Python” href=”../../Linux/

未经允许不得转载:演道网 » Python动态类型简介

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册