Python的动态类型绑定与赋值机制

与C、C++等静态类型绑定的语言不同,Python的类型是动态绑定的。也就是你在使用一个变量的时候是不必对它的类型进行声明的。这是Python的强大之处。它使得Python可以灵活的操作各种不同类型的变量。
它背后的机制是什么呢?掌握几个概念,就可以明白。
1.       名字(name )与对象(object
先说说什么是对象,对象就是系统分配的一块内存,这个内存可以有足够的空间表示希望代表的Value以及一些与该对象有关的信息标记。
名字的作用就是用来指示一个对象,使我们通过名字就可以对对象进行操作。
这就像生活中,每一个人就相当于一个对象,占据一定的空间。而每个人都要有个名字,这个名字的作用只是起到一个桥梁作用,当我们听到一个名字时可以联系到名字代表的那个“真正的”人。
2.       Python 里的对象
Python 里的对象毫无疑问也是一块内存,它保存的信息除了对象本身代表的 Value 还有类型,所以说在 Python 中类型是与对象绑定的。
3.       引用
所谓引用就是将一个名字与一个对象联系起来。就像一个新生儿,父母想出了一个名字,并将这个名字赋予他,于是名字与孩子之间就对应起来,这就是引用。
4.       Python 的赋值机制
Python中的赋值过程可以分成三步,以a = 3为例:
A.创建一个对象用来表示3
B.起一个名字a(如果之前没有用过这个名字)
C.将名字a与对象联系起来。
Ok,赋值完毕。
了解了这几个概念,我们可以明白,在python中一个变量并没有类型,它的类型完全取决于它所指向的对象。
>>> a = 1
a代表的类型就是整数,因为它是对一个整型数对象1的引用。
>>> a = “hello world”,则a代表的类型就是字符串,因为它是对字符串类型对象”hello world”的引用。
Python的这种动态类型绑定与赋值机制十分灵活。但也可能带来一定风险。例如:
>>> a = [1, 2, 3]
>>> b = a
>>> a[0] = 4
>>> b
[4, 2, 3]
        列表是一系列对象的集合。名字a是对列表对象[1, 2, 3]的引用,b = a因此b也是对[1, 2, 3]的引用,即a和b指向同一个对象,这样当a[0]被赋值为4时,相当于列表对象被改变了,即b所对应的对象被改变了。如果希望b的对象不被改变,可以使用copy.deepcopy()。系统将复制一个与a所指向的对象值相同但处于不同内存空间的新对象,并将名字b与其关联。
 
 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值