首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

三、Python的类型与运算-动态类型简介

一、变量、对象、引用

变量:在Python里,不像别的一些语言,需要声明变量类型。因为在Python里变量没有类型。

变量创建:当第一次赋值给一个变量的时候,它就自动被创建了。

变量类型:在Python里变量没有类型

变量使用:当变量被表达式使用时马上被其引用的对象所取代。

当我们输入a=3时:

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

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

引用:自动形成的从变量到对象的指针

从之前的说明能看出,变量是存放指针的,因此变量没有类型。对象是存放数据的,所以对象有类型之说,因此如下操作在Python里是完全允许的。

在这里,a分别赋值为整数,字符串,浮点数。但其实,在Python里是各自创建了整数3,字符串Three以及浮点数3.14,a只是更改了引用这些对象的指针。对象是知道自己的类型的。在对象存储的头部信息里,有着指向整数类型(int)的指针。下面看一下之前操作在Python里是如何进行的。

对象回收♻ :因为对象是独立于变量的,当不再使用的时候是得回收的。

第二次引用(赋值)后,当没有别的变量引用对象3的话,3就会回收。以此类推。

二、共享引用

在Python里两个变量可以共享一个对象,这个叫做共享引用。比如:

这个时候a跟b是共享对象3的。

当a赋另一个值了,就会新创建一个对象,a变量会引用新对象,而不是改变对象。

在a跟b都是3的时候,如下语句也不会改变b的值,也是会创建新对象,a再去引用新的对象。

列表的共享引用:

这个时候,因为更改的是对象里的元素,所以List2引用的对象也是包含24,2,3三个元素的列表。

当有些时候你需要复制列表,而不是共享,如下方法可以帮助你。

这个时候List2指向的对象里的三个元素还是1,2,3。

三、共享引用与相等

之前讲过判断两给变量相等的判断语句:== 表示测试两个值是否相等,is 表示两个值是否是同一对象。

在Python里多个变量引用同一整数,字符串的时候,会引用同一对象,所以上面的a==b和a is b的结果都会是True。

所以上面的结果,两个也都是True。

但是其他时候,在Python里给两个变量赋予同样值的对象,其对象不是共用的。

在这里发现a is b会是False。

这样的话a is b肯定是True。

需要了解一个对象被引用多少次,可以使用如下函数来查看:

这个结果会让你比较惊讶,其数值比较大是因为在很多内部函数里会使用值为1的对象。getrefcount的结果不是0的原因:因为这个函数,当你使用的时候就调用其本身,所以最终结果不可能为0。

最后大家可以思考一下下面表达式中a的值会是什么。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190117B0PP6300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券