作者birdhackor (夜殘狼)
看板Python
標題[問題] 寫法疑問
時間Wed Mar 19 17:14:57 2014
各位好,最近在看 flask 原始碼的時候看到一些寫法我很好奇為甚麼要這樣寫
例如
https://github.com/mitsuhiko/flask/blob/master/flask/exthook.py
49 行
sys.meta_path[:] = [x for x in sys.meta_path if self != x] + [self]
為什麼用 sys.meta_path[:] = ... 而不是 直接寫 sys.meta_path = ... 就好呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.157.251
1F:推 ya790206:sys.meta_path = 指指向新的 list。 03/19 19:11
2F:→ ya790206:sys.meta_path[:] 更新這個 list 03/19 19:11
3F:→ birdhackor:舊的 list 在利用 sys.meta_path = 指向新的之後 03/19 19:13
4F:→ birdhackor:不是會被回收嗎?(如果沒有別的變數指向他) 03/19 19:14
5F:→ birdhackor:會有什麼區別嗎? 03/19 19:15
6F:推 ya790206:目前想到唯一理由是避免有變數指向舊的物件,而導致不一 03/19 19:37
7F:→ ya790206:致> 03/19 19:39
8F:推 timTan:難道是thread issue? 03/19 21:43
10F:推 timTan:看了也參不透這麼做的真意,要不要寫信問問作者。 03/20 00:34
11F:→ timTan:Github 上面也沒有 issue 跟這有關。 03/20 00:34
12F:→ uranusjr:我猜應該就是 ya790206 的理由, 也有可能考慮 threading 03/20 00:37
13F:→ uranusjr:預防 race condition 吧, 反正就是這樣比較不會出包 03/20 00:37
14F:推 timTan:來 Taipei.py 分享吧 03/20 22:37