python中数据类型的可变与不可变

list

Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
list是一个可变的有序表,所以,可以往list中追加元素。

>>> a = [1,2,'hello','123']
>>> a.append('hash')
>>> a
[1, 2, 'hello', '123', 'hash']

也可以把元素插入到指定的位置。

>>> a.insert(1,'dog')
>>> a
[1, 'dog', 2, 'hello', '123', 'hash']
>>>

要删除list末尾的元素,用pop()方法。

>>> a.pop()
'hash'
>>> a
[1, 'dog', 2, 'hello', '123']

要删除指定位置的元素,用pop(i)方法,其中i是索引位置。

>>> a.pop(0)
1
>>> a
['dog', 2, 'hello', '123']
>>>

要把某个元素替换成别的元素,可以直接赋值给对应的索引位置。

>>> a[0]='cat'
>>> a
['cat', 2, 'hello', '123']
>>>

tuple

另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改。它没有append(),insert()这样的方法。当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来。

只有1个元素的tuple定义时必须加一个逗号,,来消除歧义。

>>> t = (1,)
>>> t
(1,)
>>>

其他获取元素的方法和list是一样的。

>>> t2 = (1,'hello','123')
>>> t2[1]
'hello'
>>>

最后来看一个“可变的”tuple:

>>> t3 = (1,'hello',2,['abc',22,'cat'])
>>> t3[3][1]= 11
>>> t3
(1, 'hello', 2, ['abc', 11, 'cat'])
>>>

这个tuple定义的时候有4个元素,第四个是一个列表,当我们把list的元素22变成11后,表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素,tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。

dict

Python内置了字典,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
把数据放入dict的方法,除了初始化时指定外,还可以通过key放入:

>>> d = {"name":"Ann","age":23,"gender":"female"}
>>>> d["phone"]="13245"
>>> d
{'gender': 'female', 'age': 23, 'name': 'Ann', 'phone': '13245'}
>>>

要删除一个key,用pop(key)方法,对应的value也会从dict中删除:

>>> d.pop("name")
'Ann'
>>> d
{'gender': 'female', 'age': 23, 'phone': '13245'}
>>>

和list比较,dict有以下几个特点:

查找和插入的速度极快,不会随着key的增加而增加;
需要占用大量的内存,内存浪费多。
而list相反:

查找和插入的时间随着元素的增加而增加;
占用空间小,浪费内存很少。
所以,dict是用空间来换取时间的一种方法。

set

set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
要创建一个set,需要提供一个list作为输入集合:

>>> s = set([1,2,3])
>>> s
set([1, 2, 3])
>>>

重复元素在set中自动被过滤:

>>> s = set([1,'a','a','b'])
>>> s
set(['a', 1, 'b'])
>>>

通过add(key)方法可以添加元素到set中:

>>> s.add('c')
>>> s
set(['a', 1, 'c', 'b'])
>>>

通过remove(key)方法可以删除元素:

>>> s.remove(1)
>>> s
set(['a', 'c', 'b'])
>>>

str

str是不变对象,而list是可变对象。对于可变对象,比如list,对list进行操作,list内部的内容是会变化的,而对于不可变对象,比如str,对str进行操作呢?

>>> a = 'ABC'
>>> a.replace('A','X')
'XBC'
>>> a
'ABC'
>>>

虽然字符串有个replace()方法,也确实变出了’XBC’,但变量a最后仍是’ABC’,应该怎么理解呢?
在这里我们需要清楚,a是变量,而’abc’才是字符串对象!
当我们调用a.replace(‘A’,‘X’)时,实际上调用方法replace是作用在字符串对象’ABC’上的,而这个方法虽然名字叫replace,但却没有改变字符串’ABC’的内容,replace方法创建了一个新字符串’Abc’并返回。

>>> a = "ABC"
>>> b = a.replace("A","X")
>>> b
'XBC'
>>> a
'ABC'
>>>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值