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}

posted @ 2019-08-30 18:48  MrBigB  阅读(178)  评论(0编辑  收藏  举报