动态类型简介

动态类型以及由它提供的多态性,这些概念是Python简洁灵活的基础。

a = 3

Python会执行上不同的步骤去完成这个请求:

1. 创建一个对象来代表值3

2. 创建一个变量a, 如果它还没有创建的话

3.将变量与新的对象3相连接

变量是一个系统表的元素,拥有指向对象的连接的空间

对象是分配的一块内存,有足够的空间去表示他们所代表的值

引用是字典形成的从变量到对象的指针

每个对象都有两个标准的头部信息,一个类型标志符去标识这个对象的类型,一个引用计数器,用来决定是不是可以回收这个对象。

类型属于对象,而不是变量。Python中的类型是与对象相关联的,而不是和变量关联。

对象的垃圾回收:每个对象中保持了一个计数器,计数器记录了当前指向该对象的引用的数目,一旦这个计数器被设置为0,这个对象的内存空间就会自动回收。

共享引用:

 

共享引用在原处修改:

如对列表里面某些值的修改会改变列表对象,但不会生成一个新的列表对象,那么引用不会修改,指向该对象的所有变量都会跟着改变。如果这是你预期的,ok的,如果不想要这种结果,可以copy对象从而建立了新的引用,操作就不会互相影响。

>>> l1=[1,2,3]
>>> l2=l1
>>> l1[0]=8
>>> l1
[8, 2, 3]
>>> l2
[8, 2, 3]

共享引用和相等:

Python缓存并复用小的整数和小的字符串。由于整数和字符串为不可变对象,如果更改变量,定会指向新的对象,不会影响当前的引用。

x=43;x='shrubbery'

这里的对象43也许并不会被回收,而会保存在一个系统表中,等待下一次被使用。

Python中有两种方法检查是否相等: ==判断值相等,is判断是否为同一个对象

>>> l1 = [1,2,3]
>>> l2 = l1
>>> l1==l2  # 值相等
True
>>> l1 is l2 # 引用一样的对象
True
>>> l3 = [2,3,4]
>>> l4 = [2,3,4]
>>> l3 == l4  
True
>>> l3 is l4  #引用不同的对象
False
>>> a = 3
>>> b = 3
>>> a == b
True
>>> a is b  # 结果告诉我们a,b引用了相同的对象,因为小的整数和字符串被缓存并复用了
True

 

Learning Python, Fourth Edition, by Mark Lutz.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值