Python基础(可变与不可变类型 / is和== / 特殊属性)
Posted 除了心跳都忘掉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python基础(可变与不可变类型 / is和== / 特殊属性)相关的知识,希望对你有一定的参考价值。
文章目录
可变类型与不可变类型
python所声明的变量都以对象的形式存在,存在于机器的固定内存之中。
可以理解为变量名为对象的指针
python通过使用计数器的方式来判断空间的引用情况,当计数器为0时则会将内存回收。
不可变类型:
python在声明不可变类型时,先在内存中搜索有无已存在的相同对象,若有则使新变量指向这一块内存,不再另外开辟内存。
s1 = 'xgznb'
s2 = 'xgznb'
print(id(s1), id(s2), sep='\\n')
# 2337233546608
# 2337233546608
不可变类型不可直接修改,字符串虽然可以进行分割、替换等操作,但实质上是生成了新的对象,开辟了新内存。
s1 = 'xgznb'
s2 = s1.replace('nb', '666')
print(id(s1), id(s2), sep='\\n')
# 2141137776048
# 2141137821808
可变类型:
python重复声明可变类型时,每次都会生成新的对象,开辟新的内存。
a = [1, 2, 3]
b = [1, 2, 3]
print(id(a), id(b), sep='\\n')
# 1588969296456
# 1588969296968
将可变类型赋值时,实质上是使两个指针指向同一个对象,当对一个变量进行修改时,另一个变量的内容也会改变。
a = [1, 2, 3]
b = a
a[2] = 4
print(b)
# [1, 2, 4]
is与==
python中的对象包含三要素:id、type、value。其中id用来唯一标识一个对象(内存地址),type标识对象的类型,value是对象的值。is判断的是a对象是否就是b对象,是通过id来判断的。
(obj1 is obj2) 等价于 (id(obj1) == id(obj2))
is叫做同一性运算符,判断2个变量是否引用的是同一个对象,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同。
==比较操作符:用来比较两个对象是否相等,value作为判断因素。
特殊属性
-
__ str __(self)
str(x),print(x) 都会调用对象的 __ str __()方法;
该方法只返回对应对象的一个简洁的字符串表达形式; -
__ len __(self)
len(x) 或其它试图得知x中的元素个数的函数都会最终调用 x. __ len __();
返回对象的长度(非负整数); -
__ iter __(self)
iter(x) 或试图遍历一个容器中全部元素的请求(如for i in x);
逐个返回x中的元素; -
__ contains __(self, item)
布尔测试 y in x 会调用 x. __ contains __(y) ;
对于序列x而言,如果y等于x中的某一个值,那么 __ contains __()方法应该返回True;
对于映射x而言,如果y等于x的键中的某一个,那么 __ contains __()方法应该返回True; -
__ getitem __(self, key)
实现 self[key](索引或切片)访问(,最终调用 x. __ getitem __(key)方法; -
__ setitem __(self, key, value)
与 getitem 类似,不同之处为实现的是修改 -
__ delitem __(self, key)
从容器中解绑一个项或切片(如 del x[key]),将会调用 x. __ delitem __(key)方法;
只有可变对象才应该定义这个方法;
以上是关于Python基础(可变与不可变类型 / is和== / 特殊属性)的主要内容,如果未能解决你的问题,请参考以下文章