Day 08 可变与不可变对象/列表与字典内置方法
可变对象与不可变对象
可变对象
对象指向的内存中的值会改变,当更改这个变量的时候,还是指向原来内存中的值,并且在原来的内存值进行原地修改,并没有开辟新的内存。
lis = [1]
print(id(lis)) # 167724168
lis.append(2)
print(id(lis)) # 167724168
不可变对象
对象所指向的内存中的值不能被改变,当改变这个变量的时候,原来指向的内存中的值不变,变量不再指向原来的值,而是开辟一块新的内存,变量指向新的内存。
x = 10 # 定义变量就会开辟一块新的内存空间存放变量
print(id(x)) # 1724673792
x = x + 1
print(id(x)) # 1733455648 x的id发生了变化,既x原来指向的内存中的值不变,x不再指向原来的值,而是开辟出一块新的内存, x指向新的内存
列表的内置方法
lis = [1, 2, 3]
# 索引取值/索引修改值
lis = [0]
print(lis) # 1
# 索引切片
print(lis[0:2]) # 1 2
#成员运算in / not in
print(1 in lis) # True
print(4 not in lis) # True
# for循环
for i in lis:
print(1)
# 长度len
print(len(lis)) # 3
# .append() 追加值
lis.append(4) # [1, 2, 3, 4]
# .sort() 排序
lis = [3, 2, 1]
lis.sort()
print lis # [1, 2, 3]
# .reverse() 反转
lis.reverse()
print(lis) # [3, 2, 1]
# .index() 获取元素索引
print(lis.index(2)) # 1
# .clear() 清空列表
lis.clear()
print(lis) # []
# .copy() 复制
lis1 = lis.copy()
print(lis1) # [1, 2, 3]
# .extend() 扩展列表
lis1 = [4, 5, 6]
lis.extend(lis1)
print(lis) # [1, 2, 3, 4, 5, 6]
# .remove 移除
lis.remove(3)
print(lis) # [1,2]
# .insert() 按照索引插入值(在前插入)
lis.insert(0, -1)
print(lis) # [-1, 1, 2, 3]
字典内置方法
dic = {'a': 1, 'b': 2, 'c': 3}
# 按key取值/按key修改值/按key增加值
print(dic['a']) # 1
dic['a'] = 0
print(dic) # {'a': 0, 'b': 2, 'c': 3}
dic['d'] = 4
print(dic) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
# 成员运算(比较的是key)
print('a' in dic) # True
print('e' not in dic) # True
# for循环(对key循环)
for i in dic:
print(i) # a b c
# .keys()/.value()/.items() -- 返回列表
print(dic.keys()) # 所有的key
print(dic.values()) # 所有的值
print(dic.items()) # 所有的键值对
# get() 取值
print(dic.get('a', 0)) # 找到了就返会a在字典中对应的值, 没找到就返回None, 如果给定了0, 没找到就返回0
# .update() 扩展字典
dic1 = {'d': 4}
dic.update(dic1)
print(dic) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
# .setdefault() 有则不变,无则增加
dic.setdefault('a', 2)
print(dic) # {'a': 1, 'b': 2, 'c': 3}
dic.setdefault('d', 4)
print(dic) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}