Python基础——变量、对象和引用

首先需要知道的是,python语言是动态类型语言,即变量的类型是可以随着运行时间变化的,没有必要事先声明。一个变量在第一次赋值时创建,比如x = 3,创建了变量x并且指向对象3。类型的概念存在于对象而非变量中。

对象是分配的一块内存,有足够的空间表示它所代表的的值,并且还有两个标准的头部信息:类型标识符,表示对象的类型;引用计数器,记录该对象被多少个变量或者对象引用。Python缓存了小整数和短字符串并对其进行复用,比如

>>>x = 1
>>>y = 1
>>>x is y  #is检查的是同一性,即两个变量是否引用同一对象;==操作符和is操作符不同,检查值是否相等
True

而对于其他的值,Python会创建一个新的对象去保存该值,这样同一性判断结果为False。

python中变量的赋值:

x = 4
y = x

第一个赋值语句的结果是,x引用内存中的对象4;第二个赋值语句运行后,y和x引用同一个对象,称作共享引用。如果此时再给x赋值,

>>>x = 6
>>>y
4

重新赋值只是让x引用新的对象,并不会改变原引用对象。
但是对可以在原处进行修改的对象,重新执行上面的操作,结果会有所不同,比如

>>>x = [1,2,3]#x[0]引用对象1...
>>>y = x
>>>y[2] = -1#改变y所引用的元素对象
>>>x
[1,2,-1] #x的值被改变了!

对于可以原处修改的对象,如果想进行拷贝,有以下方法:分片(适合序列)、copy模块、对象的copy()方法:

y=x[:]#创建新的对象,y指向新的内存空间
or
from copy import deepcopy
y = deepcopy(x)

注意:无条件的分片以及字典copy方法只能进行顶层复制。如果需要对一个深层嵌套的数据结构进行完整拷贝,那么需要使用copy模块。



sys模块的getrefcount()函数可以返回对象的引用次数

>>>from sys import getrefcount
>>>getrefcount(1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值