https://www.reddit.com/r/Python/comments/55iqpo/guido_on_dicts_in_python_36/
https://mail.python.org/pipermail/python-dev/2016-September/146348.html
I've been asked about this. Here's my opinion on the letter of the law in 3.6:
A compliant implementation may ensure the above three requirements either by making all dicts ordered, or by providing a custom dict subclass (e.g. OrderedDict) in those three cases.
I'd like to handwave on the ordering of all other dicts. Yes, in CPython 3.6 and in PyPy they are all ordered, but it's an implementation detail. I don't want to force all other implementations to follow suit. I also don't want too many people start depending on this, since their code will break in 3.5. (Code that needs to depend on the ordering of keyword args or class attributes should be relatively uncommon; but people will start to depend on the ordering of all dicts all too easily. I want to remind them that they are taking a risk, and their code won't be backwards compatible.)
--Guido
1
terence4444 2016-10-03 13:40:26 +08:00 via iPhone
记得有一个 OrderedDict 可以用…
|
2
Patrick95 2016-10-03 13:44:19 +08:00 via iPhone
我觉得有序挺好的,无序也没什么影响。
|
3
tabris17 2016-10-03 13:54:15 +08:00
早就该这么做了
|
5
tairan2006 2016-10-03 14:02:01 +08:00 via Android
默认实现由哈希表转为红黑树(或跳表)吧,性能当然有影响
|
7
kkzxak47 2016-10-03 14:11:04 +08:00 via Android
|
9
doubleflower 2016-10-03 15:42:14 +08:00
这功能挺人性化的,连打印调试都更好读了,而且性能损失很小可以忽略。
|
10
skydiver 2016-10-03 15:44:04 +08:00 via Android
终于和最好的语言 PHP 看齐了
|
11
awanabe 2016-10-03 17:22:07 +08:00
@terence4444 OrderedDict 里面是维护了一个链表, 如果数据量大,相当于 size 是两倍... 还是挺吓人的🎺
|
13
zonghua 2016-10-03 22:29:35 +08:00
性能再一次降低了
|
14
tabris17 2016-10-03 22:31:46 +08:00
@tairan2006 怎么可能。无非是哈希表的 bucket 加上链表而已,多维护一个链表罢了,对性能影响微乎其微
|
15
jiang42 2016-10-03 22:33:56 +08:00 via iPhone
|
16
ruoyu0088 2016-10-04 22:14:23 +08:00 1
这里有性能比较: https://gist.github.com/methane/e7a2ae389ca13905508905f5fa4ad46c
内存可以节省 20%左右。 |