可变对象
- 可变对象指的就是值可以被改变的对象,例如列表和字典。下面用列表为例,方便理解。
a = [1,2,3,4,5,6,7,8,9]
# 结果相同,同一个对象
b = a
print('a id is:',id(a))
print('b id is:',id(b))
print( a is b)
# a id is: 2027104013824
# b id is: 2027104013824
# True
这里将 a 赋值给了 b ,那么a 和 b 指向同一个对象
a = [1,2,3,4,5,6,7,8,9]
# 通过索引来修改 b 的值,结果依然相同,并且a = b
b = a
b[0] = 10
print('a id is:',id(a))
print('b id is:',id(b))
print( a is b)
# a id is: 2066374975360
# b id is: 2066374975360
# True
这里呈上,a 和 b 依然指向同一个对象,两者依然是相同的。
a = [1,2,3,4,5,6,7,8,9]
# 赋值给 b ,使 a == b ,但是此时 a 和 b 不是同一个对象(这里我们直接 copy 一下 a)
b = a.copy()
print('a id is:',id(a))
print('b id is:',id(b))
print( a is b)
# a id is: 2605618290560
# b id is: 2605618315200
# False
这里的 b 和 a 不是同一个对象,对 b 进行了赋值,虽然两者的值是一样的,但是二者的 id 不同,不再是同一个对象,修改其中一个,另一个不会发生变化。
元组
- 概念
元组(tuple)是Python 中另一重要的序列结构,与列表类似,也是由一系列按特定顺序排列的元素组成。但是它是不可变序列 - 创建于删除
tuplename=(element1,element2,…,element n)
创建元组使用的是 (),但只要用 ’ , ’ 将一组值分隔开来,Python就可以认为它是元组
tup = 1,2
print(tup,type(tup))
# (1, 2) <class 'tuple'>
tup = tuple([1,2,3,4,7,8,9,7]) # 传一个可迭代的对象
a , *b, c = tup
print('a is :',a)
print('b is :',b)
print('c is :',c)
# a is : 1
# b is : [2, 3, 4, 7, 8, 9]
# c is : 7
这里是对元组的解包。当元组的元素与变量数量不一致时,可以在变量前面加 * 号,这样变量就会获取元组中剩余的变量,以列表的形式返回
字典
- 概念
字典(dictionary)和列表类似,也是可变序列,不过与列表不同,它是无序的可变序列,保存的内容是以“键-值对”的形式存放的 - 简介
标识符为 {} ,也可以用 dict() 函数创建
a = {'name':'iron man',}
print(a)
# zip 打包(序列长度一样),取长度最小序列的对应
b = ['王同学','毛日古','王华建','欧明亮','石子呷']
c = ['妇女之友','是个好人','是个大帅哥','是个人','是个石']
d = dict(zip(b,c))
print(d)
# {'name': 'iron man'}
# {'王同学': '妇女之友', '毛日古': '是个好人', '王华建': '是个大帅哥', '欧明亮': '是个人', '石子呷': '是个石'}
# 可以将一个包含有双值子序列的序列转换为字典
x = dict(name = '毛日古',age = 22,sex = 'man',length = 1.75)
print(x)
y = dict([('name','毛日古'),('age',22),('sex','man')])
print(y)
- 字典的修改
- 可以通过 key 访问值,进行修改
# 访问 键(key) 得到值(value)
n = 'name'
e['name'] = '毛日古'
print(e[n]) # 注意 键(key) 要加 '' ,不然会当作变量处理
phone = 1251351
e['phone'] = phone
print(e)
# 毛日古
# {'name': '毛日古', 'age': 22, 'sex': 'man', 'phone': 1251351}
- dict.get(key,[default]) 如果 key 存在,则返回对应的值;如果不存在 key ,咋返回[defalut]
e = {
'name' : 'iron man',
'age' : 22,
'sex' : 'man'
}
print(e.setdefault('name','spyder man')) # 存在 key ,返回 key 的值,不对字典做任何修改
print(e)
print(e.setdefault('call','love you 3000 years'))
print(e)
# iron man
# {'name': 'iron man', 'age': 22, 'sex': 'man'}
# love you 3000 years
# {'name': 'iron man', 'age': 22, 'sex': 'man', 'call': 'love you 3000 years'}
- update() 将其他字典当中k-v添加到当前字典中,如果有重复的key,后边会覆盖前面的
d = {'a':1,'b':2,'c':3}
d2 = {'d':4,'e':5,'f':6,'a':7}
d.update(d2) # 将 d2 的值添加到 d 中
print(d)
# {'a': 7, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
- 删除 del
d = {'a':1,'b':2,'c':3}
del d['a']
print(d)
# {'b': 2, 'c': 3}
- popitem() 随机删除字典中的一个Key-Value。一般都会删除最后一个键值对,删除之后会把删除的k-v作为返回值返回
d = {'a':1,'b':2,'c':3}
d.popitem()
print(d)
# {'a': 1, 'b': 2}
- pop(key,[default]) 可以根据Key来删除k-v 它的返回值是删除的 value值
d = {'a':1,'b':2,'c':3}
d.pop('a')
print(d)
# {'b': 2, 'c': 3}
- clear()清空字典
d = {'a':1,'b':2,'c':3}
d.clear()
print(d)
# {}