1、字典的键可以是任意的不可变类型(如元组,字符串)但键不可为空,None可作为键值,空格不可以
2、如何理解浅复制(copy)和深复制(deep copy)
字典中的可变序列(列表)可被视为容器中的容器,故
①当容器中的容器被赋值为序列时,浅复制中相应的元素不会相应改变。此时相对应的ID不同
②但当容器中的容器中的元素被改变时,浅复制中相应的元素会相应改变。此时相对应的ID相同
如:
from copy import deepcopy dict = {1: 111, 2: 222, 3: [1,2,3], 4: [1,2,3]} dict1 = dict.copy() dict2 = deepcopy(dict) print 'dict:',dict,'dict1:',dict1, 'dict2:', dict2 print 'dict:',id(dict),'dict1:',id(dict1), 'dict2:', id(dict2) print 'dict键:', id(dict[1]), 'dict1键:', id(dict1[1]), 'dict2键:', id(dict2[1]) dict[1] = 333 dict[3] = [5,6,7] print 'dict:',dict,'dict1:',dict1, 'dict2:', dict2 dict[4][1] = 444 print 'dict:',dict,'dict1:',dict1, 'dict2:', dict2 print 'dict键:', id(dict[3]), 'dict1键:', id(dict1[3]), 'dict2键:', id(dict2[3]) print 'dict键:', id(dict[4]), 'dict1键:', id(dict1[4]), 'dict2键:', id(dict2[4]) 输出结果: dict: {1: 111, 2: 222, 3: [1, 2, 3], 4: [1, 2, 3]} dict1: {1: 111, 2: 222, 3: [1, 2, 3], 4: [1, 2, 3]} dict2: {1: 111, 2: 222, 3: [1, 2, 3], 4: [1, 2, 3]} dict: 33237872 dict1: 33296432 dict2: 33296720 dict键: 32209192 dict1键: 32209192 dict2键: 32209192 dict: {1: 333, 2: 222, 3: [5, 6, 7], 4: [1, 2, 3]} dict1: {1: 111, 2: 222, 3: [1, 2, 3], 4: [1, 2, 3]} dict2: {1: 111, 2: 222, 3: [1, 2, 3], 4: [1, 2, 3]} dict: {1: 333, 2: 222, 3: [5, 6, 7], 4: [1, 444, 3]} dict1: {1: 111, 2: 222, 3: [1, 2, 3], 4: [1, 444, 3]} dict2: {1: 111, 2: 222, 3: [1, 2, 3], 4: [1, 2, 3]} dict键: 33274656 dict1键: 33243384 dict2键: 33274576 dict键: 33225184 dict1键: 33225184 dict2键: 33272016
1、fromkeys: 使用给定的键建立新的字典,每个键都对应默认的值None,也可给定默认值。
注:建立的是新的字典,跟原字典无关。
2、has_key: 检查字典中是否含有指定的键
3、keys: 以列表形式返回字典中的键
4、values:以列表形式返回字典中的值
5、items: 以列表形式返回字典中的键值对
6、update: 用一个字典更新另一个字典
7、copy: 对字典进行浅复制
8、clear: 清空字典
9、popitem: 随机地移除字典中的键值对
10、get: 访问字典中是否有存在的项,若没有则返回指定的信息
11、setdefault: 当键不存在时,setdefault返回默认值并相应地更新字典,如果键存在则返回与其相应的值。
4、字典方法总结
1、除update、clear外都有返回值
2、has_key返回的是布尔值
3、copy返回的是一个字典
4、由于字典是无序的,所以:
①keys、values、items以及iter*等的方法返回结果都是无序的
②遍历字典的输出结果是无序的
③无法使用如list的append方法等跟位置有关的方法
④popitem弹出随机的项