前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python3学习笔记 | 三、Python的类型与运算-动态类型简介

Python3学习笔记 | 三、Python的类型与运算-动态类型简介

作者头像
TeamsSix
发布2019-09-24 17:11:23
5920
发布2019-09-24 17:11:23
举报
文章被收录于专栏:TeamsSix的网络空间安全专栏

一、变量、对象、引用

变量:在Python里,不像别的一些语言,需要声明变量类型。因为在Python里变量没有类型。 变量创建:当第一次赋值给一个变量的时候,它就自动被创建了。 变量类型:在Python里变量没有类型 变量使用:当变量被表达式使用时马上被其引用的对象所取代。

代码语言:javascript
复制
>>> a=153  #在这里3是整数
>>> a='Dora'  #在这里"Three"是字符串
>>>
>>> a=153  #创建变量a,创建对象3,a变量引用对象3

当我们输入a=3时:

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

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

代码语言:javascript
复制
>>> a=3
>>> a="Three"
>>> a=3.14

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

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

代码语言:javascript
复制
>>> a=3>>> 
a="pie"   #回收整数3
>>> a=3.14   #回收字符串"pie"
>>> a=[3,1,4]   #回收浮点数3.14

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

二、共享引用

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

代码语言:javascript
复制
>>> a=3
>>> b=a

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

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

代码语言:javascript
复制
>>> a="Three"

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

代码语言:javascript
复制
>>> a=a+2

列表的共享引用:

代码语言:javascript
复制
>>> List1=[1,2,3] #List1引用三个对象的对象,对象里有三个元素1,2,3
>>> List2=List1 #给List2赋值List1的指针
>>> List1[0]=24 #更改List1对象的第一个元素为24,现在三个元素是24,2,3

这个时候,因为更改的是对象里的元素,所以List2引用的对象也是包含24,2,3三个元素的列表。 当有些时候你需要复制列表,而不是共享,如下方法可以帮助你。

代码语言:javascript
复制
>>> List1=[1,2,3] #List1引用三个对象的对象,对象里有三个元素1,2,3
>>> List2=List1[:] #复制List1引用的对象,把新的对象引用到List2
>>> List1[0]=24 #更改List1对象的第一个元素为24,现在三个元素是24,2,3

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

三、共享引用与相等

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

代码语言:javascript
复制
>>> a=1
>>> b=1
>>> a == b
True
>>> a is b
True

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

代码语言:javascript
复制
>>> a="One"
>>> b="One"
>>> a == b
True
>>> a is b
True

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

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

代码语言:javascript
复制
>>> a=3.14
>>> b=3.14
>>> a == b
True
>>> a is b
False

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

代码语言:javascript
复制
>>> a=3.14
>>> b=a
>>> a is b
True

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

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

代码语言:javascript
复制
>>> import sys
>>> sys.getrefcount(1)
121
>>> sys.getrefcount(6)
17

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

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

代码语言:javascript
复制
a="text"
b=a
b="change"
a?a=[1,2,3]
b=a
b[0]=3
a?a=[1,2,3]
b=a[:]
b[0]=3
a?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 TeamsSix 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、变量、对象、引用
  • 二、共享引用
  • 三、共享引用与相等
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档