python2.5到2.6字节码指令变化点点发现(想到什么再写什么)
《Python源码剖析》中用的Python版本为2.5.2
书中所写对
d = {"1":1, "2":2}字典创建语句所得到的字节码为(略有删减):
1 BUILD_MAP
2
3 DUP_TOP
4
5 LOAD_CONST (1)
6
7 ROT_TWO
8
9 LOAD_CONST ('1')
10
11 STORE_SUBSCR
12
13 DUP_TOP
14
15 LOAD_CONST (2)
16
17 ROT_TWO
18
19 LOAD_CONST ('2')
20
21 STORE_SUBSCR
22
23 STORE_NAME (d)
其中会有对此对栈顶字典元素的重复创建和栈顶两元素的对调
而在我正在使用的2.6.5版本中 该语句的字节码已变为(略有删减):
1 BUILD_MAP
2
3 LOAD_CONST (1)
4
5 LOAD_CONST ('1')
6
7 STORE_MAP
8
9 LOAD_CONST (2)
10
11 LOAD_CONST ('2')
12
13 STORE_MAP
14
15 STORE_NAME (d)
操作已经简化为了直接取出两元素作为键和值插入到字典中
同时STORE_SUBSCR的功能也有了相应的变化
嚓
………………
……………
…………
………
……
…