前言
本文为《流畅的python》的2.5-2.7节的学习笔记。
序列的增量赋值
#可变序列
l = [1, 2, 3]
print(id(l))
l *= 3
print(id(l))
#不可变序列
l = (1, 2, 3)
print(id(l))
l *= 3
print(id(l))
>>>
2822868315208
2822868315208
2822868759104
2822868458616
说明:
序列的增量赋值,对于可变序列和不可变序列,增量赋值的结果是不一样的,对于可变序列,以列表为例,进行增量赋值后,查看其前后的id是一样的地址,即可变序列的增量赋值是在原地址上的’就地操作’,是对原可变序列的直接操作,原可变序列的内容会被修改,而不会创建一个同类型新可变序列;对于不可变序列,以元组为例,进行增量赋值后,查看其前后的id是不一样的地址,即不可变序列的增量赋值是创建一个新的同类型不可变序列,原不可变序列的内容不会被修改。
备注:对序列使用+和*操作,这两种操作,原序列不会被修改,而会创建一个新的同类型序列。注意这两种操作和增量赋值操作的差异。
list.sort方法与内置函数sort()
fruits = ['grape', 'raspberry', 'apple', 'banana']
sorted(fruits)
print(sorted(fruits))
print((fruits))
fruits.sort()
print((fruits))
>>>
['apple', 'banana', 'grape', 'raspberry']
['grape', 'raspberry', 'apple', 'banana']
['apple', 'banana', 'grape', 'raspberry']
说明:
此例用于说明list.sort方法和内置函数sorted的差异。
可以看到,前后分别打印了sorted(fruits)和fruits,而fruits的内容与原内容是一样的,即sorted(fruits)是新建一个列表,对原列表无影响。当fruits.sort()运行后,打印fruits的内容发现与原内容是不一样的,即fruits.sort()方法是对原列表的就地排序。
总结
- 序列的+和*操作
序列的+和*操作是新建一个序列。
- 序列的增量赋值
序列的增量赋值对于可变序列和不可变序列的结果是区别的。
- list.sort方法和内置函数sort()
list.sort方法是对原序列的就地排序,而内置函数sort()会创建一个新序列用于返回排序结果,原序列的内容不会被修改。
1713

被折叠的 条评论
为什么被折叠?



