9.1 Mutable Sequences
9.1.1 List
to_five = [1, 2, 3, 4, 5]
to_six = to_five
to_six = to_six + [6]
当to_six指向to_five时,对to_six做操作,实质是对to_six做操作,但是重新定义to_six,to_six获得新地址,对其操作不会影响to_five。详见9.4。
>>> lst = [6, 1, "b"]
>>> lst
[6, 1, 'b']
>>> lst[2] = "a"
>>> lst
[6, 1, 'a']
>>> lst.append(2)
>>> lst
[6, 1, 'a', 2]
>>> lst.extend([0, 1, 9])
>>> lst
[6, 1, 'a', 2, 0, 1, 9]
>>> lst.insert(3, "summer")
>>> lst
[6, 1, 'a', 'summer', 2, 0, 1, 9]
append, extend, insert 本身返回 None
>>> a = list.append(7)
>>> lst
[6, 1, 'a', 'summer', 2, 0, 1, 9, 7]
>>> print(a)
None
>>> lst
[6, 1, 'a', 'summer', 2, 0, 1, 9, 7]
>>> lst.pop()
7
>> lst
[6, 1, 'a', 'summer', 2, 0, 1, 9]
>>> b = lst.pop(3)
>>> lst
[6, 1, 'a', 2, 0, 1, 9]
>>> b
'summer'
>>> lst.remove(6)
>>> lst
[1, 'a', 2, 0, 1, 9]
pop传入待删除值在列表中的索引, remove传入删除值(做顺次删除); pop 返回删除值, remove返回 None
9.1.2 Dictionary
>>> d = {"M": "Alex", "W": "Tiffany", "Th": "Chris"}
>>> d["M"]
'Alex'
>>> d.items()
dict_items([('M', 'Alex'), ('W', 'Tiffany'), ('Th', 'Chris')])
>>> d.values()
dict_values(['Alex', 'Tiffany', 'Chris'])
>>> d.keys()
dict_keys(['M', 'W', 'Th'])
>>> "W" in d
True
>>> "Tiffany" in d
False
>>> "Tiffany" in d.values()
True
9.2 Immutable Values
9.2.1 String
>>> s = "cs61b"
>>> s[4]
'b'
>>> s[4] = 'a'
Error
9.2.2 Tuple
>>> t = (1, 2, 3, 4)
>>> t[2]
3
>>> t[0] = 0
Error
python中返回多个值的写法其实就是返回一个省略了括号的元组
9.3 Mutating Within Functions
def mystery(lst):
lst.pop()
lst.pop()
>>> four = [4, 4, 4, 4]
>>> mystery(four)
>>> four
[4, 4]
9.4 Identity Versus Equality
Identity : <expr0> is <expr1>
Equality : <expr0> == <expr1>
>>> l1 = [1, 2, 3]
>>> l2 = [1, 2, 3]
>>> l1 is l2
False
>>> l3 = l1
>>> l3 is l1
True
>>> l3 == l1
True
>>> l1 == l2
True
>>> l1[0] = 0
>>> l1
[0, 2, 3]
>>> l3
[0, 2, 3]
>>> l2
[1, 2, 3]
>>> l1 = l2[:]
>>> l1
[1, 2, 3]
>>> l1 == l2
True
>>> l1 is l2
False
切片总是创建列表的副本,创建一个新列表
lst1 = [1, [2, 3], 4]
lst2 = lst1
lst3 = lst1[:]
lst1[0] = 10
lst3[2] = 40
lst2[1][1] =30
lst2.pop(1)
lst1.append(lst3)
print(lst1)
print(lst2)
print(lst3)
[10, 4, [1, [2, 30], 40]]
[10, 4, [1, [2, 30], 40]]
[1, [2, 30], 40]
lst1 = [1]
lst1.append(lst1)
print(lst1)
[1, [...]]