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作为判断因素。

特殊属性

  1. __ str __(self)
    str(x),print(x) 都会调用对象的 __ str __()方法;
    该方法只返回对应对象的一个简洁的字符串表达形式;

  2. __ len __(self)
    len(x) 或其它试图得知x中的元素个数的函数都会最终调用 x. __ len __();
    返回对象的长度(非负整数);

  3. __ iter __(self)
    iter(x) 或试图遍历一个容器中全部元素的请求(如for i in x);
    逐个返回x中的元素;

  4. __ contains __(self, item)
    布尔测试 y in x 会调用 x. __ contains __(y) ;
    对于序列x而言,如果y等于x中的某一个值,那么 __ contains __()方法应该返回True;
    对于映射x而言,如果y等于x的键中的某一个,那么 __ contains __()方法应该返回True;

  5. __ getitem __(self, key)
    实现 self[key](索引或切片)访问(,最终调用 x. __ getitem __(key)方法;

  6. __ setitem __(self, key, value)
    与 getitem 类似,不同之处为实现的是修改

  7. __ delitem __(self, key)
    从容器中解绑一个项或切片(如 del x[key]),将会调用 x. __ delitem __(key)方法;
    只有可变对象才应该定义这个方法;

以上是关于Python基础(可变与不可变类型 / is和== / 特殊属性)的主要内容,如果未能解决你的问题,请参考以下文章

python —— 可变与不可变类型

Python可变类型与不可变类型

Python可变类型与不可变类型

Python可变类型与不可变类型

Python可变类型与不可变类型

Python的可变类型与不可变类型