python知识整理--议可变对象和不可变对象以及str、list、tuple、dict、set

可变对象:变量、list

不可变对象:str、tuple、dict、set

1、变量是可变的不用多说,变量赋值一次便改变一次。

2、list

可变对象,可对list进行如下添加删除排序等操作。

list = [2,3,5,1,2]
list.append(8)
list.insert(0,6)
list.pop(3)
list.sort()

list使用append()在末尾处添加元素;使用insert(n,m)在索引n即list[n]处添加m元素;使用pop(n)删除索引n即list[n]处元素,默认pop()则为删除末尾元素;使用sort()对list进行排序。

3、tuple

一旦初始化就不能修改,即没有添加删除排序等操作函数。tuple的元素,指向是不变的。

tuple = (1,2,3,4,5)

需要注意到的是定义空tuple则用(),而用来定义一个元素的话需要加上一个“,”逗号,否则python会将其处理为变量:

tuple = () #定义空的tuple
tuple = (1,) #定义一个元素的tuple

4、dic

即dictionary,使用键-值(key-value)存储,具有极快的查找速率。下面是对dic的初始化

dic = {'a':1,'b':2,'c':3}

为什么dic查找速率快,因为它和字典的原理一样。通过键可以直接找到键对应存放值的内存地址。

dic[d] = 4
dic.get('x')
dic.get('x',-1)
dic.pop('a')

dic除了初始化的时候,还可以使用key将数据直接放入(dic同样使用索引,例如dic['a'] ,交互界面会输出1)

使用get()可以查找dic中有无此key,没有则返回NONE(交互界面不会显示),或者指定数字,例如dic.get('x',-1)

使用in也可以查找,python会输出false或true

'y' in dic

在dic中删除数据则用pop(key),对应的value也会变删除。

和list不同,dic有几个特点:1.查找插入速度快,不会随着数据增多而减慢;2.占用内存大,数据越多占用内存越大。

list的特点则是:1.查找插入随着元素增多变慢;2.占用内存小。

dic属于用空间换取速度。

dic因为按照key来查找value(hash算法),所以dic的key是绝对的不可变对象

5、set

原理和dic一样,是一个key的集合,但是不存储value,可以看成数学上无序和无重复元素的集合。因为无法判断两个变量是否相等,所以set也是不可变对象。

>>>set = ([1,2,2,3,3,3,4])
>>>set
{1,2,3,4}
>>>set.add(5)
>>>set
{1,2,3,4,5}
>>>set.remove(2)
>>>set
{1,3,4,5}

如上所示,但是输出的顺序是无序的,不一定是上面的输出。

可以使用add()增加元素,remove()删除元素。

6、str

str也是不变对象。虽然str有replace(),但是其实是产生了一个新的字符串。例如:

>>> a = 'abc'
>>> b = a.replace('a', 'A')
>>> b
'Abc'
>>> a
'abc'
虽然replace的对象是'abc',但是并没有改变'abc',而是创建了新字符串'Abc'。
所以,对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。


猜你喜欢

转载自blog.csdn.net/qq_36689800/article/details/79545692
今日推荐