机器人 救救瓜
Toggle navigation
Home
SCM-tool
Linux
Jenkins
SVN
other
About Me
Archives
Tags
python 笔记之 python 中一些常用方法append setdefault deepcopy copy
? python ?
2021-02-24 14:55:56
1113
0
0
gua_l
? python ?
### **append** 方法append用于将一个对象附加到列表末尾。 ``` >>> lst = [1, 2, 3] >>> lst.append(4) >>> lst [1, 2, 3, 4] ``` append也就地修改列表。这意味着它不会返回修 改后的新列表,而是直接修改旧列表。 ``` # l 指向letterGirls['a'] , 然后 l 后面附加一串‘cc’ , letterGirls['a']的值也被修改,两者指向同一个列表,即原件相同,关联同一个列表 >>> l = letterGirls.setdefault('a', []) >>> l ['alice', 'alice', 'aly', 'aa', 'bb'] >>> l.append('cc') >>> l ['alice', 'alice', 'aly', 'aa', 'bb', 'cc'] >>> letterGirls {'a': ['alice', 'alice', 'aly', 'aa', 'bb', 'cc'], 'b': ['bernice', 'bernice'], 'c': ['clarice', 'clarice']} # 同理,引用同一个列表,其删作一个元素,另一个也修改 >>> b = l >>> b ['alice', 'alice', 'aly', 'aa', 'bb', 'cc'] >>> del(b[3]) >>> l ['alice', 'alice', 'aly', 'bb', 'cc'] >>> b ['alice', 'alice', 'aly', 'bb', 'cc'] ``` ### **setdefault** 方法setdefault有点像get,因为它也获取与指定键相关联的值,但除此之外,setdefault 还在字典不包含指定的键时,在字典中添加指定的键-值对。 ``` >>> d = {} >>> d.setdefault('name', 'N/A') 'N/A' >>> d {'name': 'N/A'} >>> d['name'] = 'Gumby' >>> d.setdefault('name', 'N/A') 'Gumby' >>> d {'name': 'Gumby'} # 如你所见,不存在时,setdefault返回指定的值并相应地更新字典。如果指定的键 存在,就返回其值,并保持字典不变。与get一样,值是可选的;如果没有指定,默认为None。 >>> d = {} >>> print(d.setdefault('name')) None >>> d {'name': None} ``` 与append合用,会就地在键对应的值后面追加。 因为setfault返回指定的值并更新字典时,letterGirls.setdefault(girl[0], [])返回的是一个值的原件,再执行append 修改这个原件,对应字段里的这个原件也就再一次更新了 ``` letterGirls.setdefault(girl[0], []).append(girl) ``` ### **copy and deepcopy** 方法copy返回一个新字典,其包含的键-值对与原来的字典相同(这个方法执行的是浅复制, 因为值本身是原件,而非副本)。 ``` >>> x = {'username': 'admin', 'machines': ['foo', 'bar', 'baz']} >>> y = x.copy() >>> y['username'] = 'mlh' >>> y['machines'].remove('bar') >>> y {'username': 'mlh', 'machines': ['foo', 'baz']} >>> x {'username': 'admin', 'machines': ['foo', 'baz']} ``` **当替换副本中的值时,原件不受影响。然而,如果修改副本中的值(就地修改而 不是替换),原件也将发生变化,因为原件指向的也是被修改的值(如这个示例中的'machines' 列表所示)。** 为避免这种问题,一种办法是执行深复制,即同时复制值及其包含的所有值,等等。为此, 可使用模块copy中的函数deepcopy。 ``` >>> from copy import deepcopy >>> d = {} >>> d['names'] = ['Alfred', 'Bertrand'] >>> c = d.copy() >>> dc = deepcopy(d) >>> d['names'].append('Clive') >>> c {'names': ['Alfred', 'Bertrand', 'Clive']} >>> dc {'names': ['Alfred', 'Bertrand']} ```
Pre:
python 笔记之 python函数的参数是可变的数据结构时需要创建副本
Next:
python 笔记之 Python 推导
0
likes
1113
Weibo
Wechat
Tencent Weibo
QQ Zone
RenRen
Submit
Sign in
to leave a comment.
No Leanote account?
Sign up now.
0
comments
More...
Table of content
No Leanote account? Sign up now.