《Python编程快速上手》读书笔记4:列表(二)

本系列笔记只记录python3和C语言的差异之处

1 类似列表的类型:字符串和元组

字符串可以看成单个文本字符的列表,对列表的许多操作,也可以作用于字符串:按下标取值、切片、用于for循环、用于len()、以及用于in和not in操作符。

>>> name = 'hanchen'
>>> name[0]
'h'
>>> name[-2]
'e'
>>> name[0:4]
'hanc'
>>> 'han' in name
True
>>> 'b' not in name
True
>>> for i in name:
	print('n:' + i)
n:h
n:a
n:n
n:c
n:h
n:e
n:n

但列表和字符串在一个重要的方面是不同的。列表属于可变数据类型,列表中的值是可以添加、修改和删除的,而字符串是不可变数据类型,它的值不能被更改,当尝试修改时会导致TypeError错误。

>>> name = 'hanchen'
>>> name[3] = '_'
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    name[3] = '_'
TypeError: 'str' object does not support item assignment

还有一个和列表极其相似的数据类型:元组数据类型。元组用圆括号(),而不是方括号[]。元组也属于不可变数据类型,其中的值不可被添加、修改和删除。如果元组只有一个值,需要在其后跟上一个逗号,以告诉解释器这是一个元组类型。当需要一个永不改变的序列时,可以用元组,python内部会对元组进行优化,其处理速度大于列表。

>>> name = ('hanchen', 25, 'yuren', 23)
>>> name[0]
'hanchen'
>>> name[1:3]
(25, 'yuren')
>>> len(name)
4
>>> name[0] = 'han'
Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    name[0] = 'han'
TypeError: 'tuple' object does not support item assignment
>>> type(('hanchen',))
<class 'tuple'>
>>> type(('hanchen'))
<class 'str'>

可以用list()和tuple()函数来强制转换一个序列的数据类型。

>>> tuple(['hanchen', 25])
('hanchen', 25)
>>> list(('hanchen', 25))
['hanchen', 25]
>>> list('hanchen')
['h', 'a', 'n', 'c', 'h', 'e', 'n']
2 引用

引用的概念其实就是C语言中的指针,当变量需要保存可变数据类型时,如列表和字典,保存的就是其值的引用(地址);当保存不可变数据类型时,保存的是其值本身。

>>> spam = 42
>>> cheese = spam
>>> spam = 100
>>> spam
100
>>> cheese
42
>>> spam = [0, 1, 2, 3]
>>> cheese = spam
>>> cheese[1] = 'hanchen'
>>> spam
[0, 'hanchen', 2, 3]
>>> cheese
[0, 'hanchen', 2, 3]

当函数处理可变数据类型的变量时,由于处理得是其值的引用,会不可避免的对原来的值造成影响。如果不希望影响到原先的值,那就可以使用copy模块中copy()和deepcopy()函数。copy()函数用来复制一个列表或字典这样的可变值,而不是复制引用;deepcopy()针对列表中还有列表的嵌套数据类型。

>>> import copy
>>> spam = [1, 2, 3, 4]
>>> cheese = copy.copy(spam)
>>> cheese[1] = 'A'
>>> spam
[1, 2, 3, 4]
>>> cheese
[1, 'A', 3, 4]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值