Here, we go, this is *much* better.
I looked over one of the bottlenecks in the API, the _elementFactory function.
I found that the main problem was my implementation of the namespace element
lookup, which translated to extremely inefficient C code. I rewrote that with
explicit Python API calls and that gives us between 10% and 400% speed up in
the benchmarks, depending on the API intensiveness of the tests. Note that
lxml is faster than ElementTree in the benchmark tree setup now.
Now, the main area where lxml is substantially slower than ElementTree is when
moving elements between documents by hand. This is rare and can be avoided
pretty often, I guess. Note that moving an entire XML tree to a new document
in the obvious one-step operation is *not* so expensive in lxml. What matters
is the overhead of creating a Python representation of elements, which is
purely API related. Everything that runs internally runs mainly at the speed
of libxml2. A special beauty here is the deepcopy benchmark.
There still is a certain overhead in the API-to-libxml2 mapping, so programs
that extensively create elements one after the other are better off with
ElementTree and cElementTree. This advantage already diminishes when
SubElement is used, for which lxml is now faster than ElementTree. In all
other cases, I wouldn't see a major advantage for the two. Especially none
that should keep people from using lxml. Depending on the tree size/structure
and the operation, lxml and cElementTree can both take the lead.
Since the APIs are largely compatible, I see the main decision maker as follows:
* If your problem is small and not performance critical, use whatever you like
* If you create tons of independent elements, use cElementTree or consider
changing your algorithms :)
* If your program is mainly API bound, use cElementTree
* If your program is dominated by large XML structures, try both lxml and
cElementTree
* If you often need to copy large trees, consider lxml
* If you need features like XPath, XSLT, RNG, custom APIs, ... - use lxml
* If you need those features and more speed, send a patch to this list
Have fun,
Stefan
Preparing test suites and trees ...
Running benchmark on etree, ElementTree, cElementTree
Setup times for trees in seconds:
etree : 0.1827, 0.1651, 0.0371, 0.0008
ElementTree : 0.2251, 0.2564, 0.0574, 0.0010
cElementTree : 0.0378, 0.0176, 0.0088, 0.0001
etree append_elements (T1 ) 2.1396 2.2991 2.2673 msec/pass, best: 2.1396
ElementTree append_elements (T1 ) 0.3253 0.3294 0.3451 msec/pass, best: 0.3253
cElementTree append_elements (T1 ) 0.1065 0.0814 0.0795 msec/pass, best: 0.0795
etree append_elements (T2 ) 9.5490 9.8586 9.8201 msec/pass, best: 9.5490
ElementTree append_elements (T2 ) 4.9283 4.9106 4.9252 msec/pass, best: 4.9106
cElementTree append_elements (T2 ) 0.7983 0.8127 0.8101 msec/pass, best: 0.7983
etree append_elements (T3 ) 0.1166 0.1110 0.1099 msec/pass, best: 0.1099
ElementTree append_elements (T3 ) 0.1056 0.1081 0.1097 msec/pass, best: 0.1056
cElementTree append_elements (T3 ) 0.0308 0.0326 0.0314 msec/pass, best: 0.0308
etree append_elements (T4 ) 0.6297 0.4669 0.4662 msec/pass, best: 0.4662
ElementTree append_elements (T4 ) 0.2243 0.2092 0.2179 msec/pass, best: 0.2092
cElementTree append_elements (T4 ) 0.0375 0.0376 0.0355 msec/pass, best: 0.0355
etree append_from_document (T1,T2 ) 17.5267 12.2076 12.4225 msec/pass, best: 12.2076
ElementTree append_from_document (T1,T2 ) 7.2593 8.3792 8.1089 msec/pass, best: 7.2593
cElementTree append_from_document (T1,T2 ) 0.4959 0.5207 0.4878 msec/pass, best: 0.4878
etree append_from_document (T1,T3 ) 0.8263 0.8588 0.8604 msec/pass, best: 0.8263
ElementTree append_from_document (T1,T3 ) 0.0907 0.0806 0.0843 msec/pass, best: 0.0806
cElementTree append_from_document (T1,T3 ) 0.0324 0.0324 0.0348 msec/pass, best: 0.0324
etree append_from_document (T1,T4 ) 1.6374 1.8921 1.7790 msec/pass, best: 1.6374
ElementTree append_from_document (T1,T4 ) 0.1675 0.1767 0.1696 msec/pass, best: 0.1675
cElementTree append_from_document (T1,T4 ) 0.0590 0.0578 0.0561 msec/pass, best: 0.0561
etree append_from_document (T2,T1 ) 46.6267 44.5527 33.6675 msec/pass, best: 33.6675
ElementTree append_from_document (T2,T1 ) 1.6526 1.2971 1.9397 msec/pass, best: 1.2971
cElementTree append_from_document (T2,T1 ) 0.0589 0.0589 0.0579 msec/pass, best: 0.0579
etree append_from_document (T2,T3 ) 0.8258 0.8747 0.8474 msec/pass, best: 0.8258
ElementTree append_from_document (T2,T3 ) 0.0849 0.0896 0.0837 msec/pass, best: 0.0837
cElementTree append_from_document (T2,T3 ) 0.0333 0.0438 0.0326 msec/pass, best: 0.0326
etree append_from_document (T2,T4 ) 1.6711 1.8064 1.8190 msec/pass, best: 1.6711
ElementTree append_from_document (T2,T4 ) 2.0507 2.4498 2.7369 msec/pass, best: 2.0507
cElementTree append_from_document (T2,T4 ) 0.0447 0.0477 0.0477 msec/pass, best: 0.0447
etree append_from_document (T3,T1 ) 23.7482 23.7627 24.5559 msec/pass, best: 23.7482
ElementTree append_from_document (T3,T1 ) 3.3216 3.7194 3.4479 msec/pass, best: 3.3216
cElementTree append_from_document (T3,T1 ) 0.0639 0.1068 0.0728 msec/pass, best: 0.0639
etree append_from_document (T3,T2 ) 9.1862 9.7372 10.1377 msec/pass, best: 9.1862
ElementTree append_from_document (T3,T2 ) 6.2612 7.0192 6.8504 msec/pass, best: 6.2612
cElementTree append_from_document (T3,T2 ) 0.4900 0.5061 0.5034 msec/pass, best: 0.4900
etree append_from_document (T3,T4 ) 0.1238 0.1324 0.1245 msec/pass, best: 0.1238
ElementTree append_from_document (T3,T4 ) 0.1831 0.1520 0.1646 msec/pass, best: 0.1520
cElementTree append_from_document (T3,T4 ) 0.0322 0.0579 0.0326 msec/pass, best: 0.0322
etree append_from_document (T4,T1 ) 23.8607 24.0458 24.7333 msec/pass, best: 23.8607
ElementTree append_from_document (T4,T1 ) 0.1792 0.1784 0.1760 msec/pass, best: 0.1760
cElementTree append_from_document (T4,T1 ) 0.0677 0.0696 0.0694 msec/pass, best: 0.0677
etree append_from_document (T4,T2 ) 9.6456 10.0888 10.2759 msec/pass, best: 9.6456
ElementTree append_from_document (T4,T2 ) 4.9667 5.1865 5.2433 msec/pass, best: 4.9667
cElementTree append_from_document (T4,T2 ) 0.4923 0.5122 1.4466 msec/pass, best: 0.4923
etree append_from_document (T4,T3 ) 0.5469 0.5745 0.5633 msec/pass, best: 0.5469
ElementTree append_from_document (T4,T3 ) 0.0769 0.0754 0.0798 msec/pass, best: 0.0754
cElementTree append_from_document (T4,T3 ) 0.0248 0.0252 0.0253 msec/pass, best: 0.0248
etree clear (T1 ) 6.8760 6.9473 6.9588 msec/pass, best: 6.8760
ElementTree clear (T1 ) 17.0238 17.1312 17.4397 msec/pass, best: 17.0238
cElementTree clear (T1 ) 2.1736 2.1512 2.1850 msec/pass, best: 2.1512
etree clear (T2 ) 6.9850 7.1344 7.1863 msec/pass, best: 6.9850
ElementTree clear (T2 ) 28.4882 17.6843 17.8492 msec/pass, best: 17.6843
cElementTree clear (T2 ) 2.4351 2.4483 2.4590 msec/pass, best: 2.4351
etree clear (T3 ) 0.5403 0.5393 0.5486 msec/pass, best: 0.5393
ElementTree clear (T3 ) 4.3183 4.3355 4.3676 msec/pass, best: 4.3183
cElementTree clear (T3 ) 0.3575 0.3696 0.3694 msec/pass, best: 0.3575
etree clear (T4 ) 0.0243 0.0230 0.0225 msec/pass, best: 0.0225
ElementTree clear (T4 ) 0.0497 0.0468 0.0491 msec/pass, best: 0.0468
cElementTree clear (T4 ) 0.0065 0.0069 0.0066 msec/pass, best: 0.0065
etree create_subelements (T1 ) 0.4447 0.4291 0.4390 msec/pass, best: 0.4291
ElementTree create_subelements (T1 ) 0.4023 0.4029 0.4081 msec/pass, best: 0.4023
cElementTree create_subelements (T1 ) 0.0650 0.0624 0.0642 msec/pass, best: 0.0624
etree create_subelements (T2 ) 6.4463 6.5367 6.4625 msec/pass, best: 6.4463
ElementTree create_subelements (T2 ) 6.4680 6.4867 6.5039 msec/pass, best: 6.4680
cElementTree create_subelements (T2 ) 0.5437 0.5510 0.5644 msec/pass, best: 0.5437
etree create_subelements (T3 ) 0.0982 0.0962 0.0966 msec/pass, best: 0.0962
ElementTree create_subelements (T3 ) 0.1408 0.1207 0.1170 msec/pass, best: 0.1170
cElementTree create_subelements (T3 ) 0.0279 0.0268 0.0265 msec/pass, best: 0.0265
etree create_subelements (T4 ) 0.3160 0.3148 0.3172 msec/pass, best: 0.3148
ElementTree create_subelements (T4 ) 0.3121 0.2866 0.2813 msec/pass, best: 0.2813
cElementTree create_subelements (T4 ) 0.0210 0.0210 0.0212 msec/pass, best: 0.0210
etree deepcopy (T1 ) 17.9121 19.2798 18.9026 msec/pass, best: 17.9121
ElementTree deepcopy (T1 ) 805.1189 805.3489 872.4165 msec/pass, best: 805.1189
cElementTree deepcopy (T1 ) 505.1526 479.0999 474.0529 msec/pass, best: 474.0529
etree deepcopy (T2 ) 30.3835 31.2109 31.1521 msec/pass, best: 30.3835
ElementTree deepcopy (T2 ) 1027.0189 1034.5323 1110.9516 msec/pass, best: 1027.0189
cElementTree deepcopy (T2 ) 534.4865 499.5629 523.3296 msec/pass, best: 499.5629
etree deepcopy (T3 ) 3.2103 3.1447 3.1190 msec/pass, best: 3.1190
ElementTree deepcopy (T3 ) 188.7364 189.6626 192.9635 msec/pass, best: 188.7364
cElementTree deepcopy (T3 ) 124.1634 121.2389 121.2373 msec/pass, best: 121.2373
etree deepcopy (T4 ) 0.6969 0.6899 0.7117 msec/pass, best: 0.6899
ElementTree deepcopy (T4 ) 4.4663 4.3800 4.4279 msec/pass, best: 4.3800
cElementTree deepcopy (T4 ) 3.1183 3.1667 3.0353 msec/pass, best: 3.0353
etree getchildren (T1 ) 21.8075 22.5544 22.9289 msec/pass, best: 21.8075
ElementTree getchildren (T1 ) 0.1317 0.1362 0.1310 msec/pass, best: 0.1310
cElementTree getchildren (T1 ) 0.9512 0.9820 0.9762 msec/pass, best: 0.9512
etree getchildren (T2 ) 20.1090 17.5955 17.8679 msec/pass, best: 17.5955
ElementTree getchildren (T2 ) 1.4564 1.4540 1.4398 msec/pass, best: 1.4398
cElementTree getchildren (T2 ) 1.3277 1.3638 1.3366 msec/pass, best: 1.3277
etree getchildren (T3 ) 0.0357 0.0358 0.0353 msec/pass, best: 0.0353
ElementTree getchildren (T3 ) 0.0633 0.0640 0.0679 msec/pass, best: 0.0633
cElementTree getchildren (T3 ) 0.0240 0.0254 0.0255 msec/pass, best: 0.0240
etree getchildren (T4 ) 0.1035 0.0940 0.0942 msec/pass, best: 0.0940
ElementTree getchildren (T4 ) 0.0671 0.0709 0.0690 msec/pass, best: 0.0671
cElementTree getchildren (T4 ) 0.0276 0.0272 0.0280 msec/pass, best: 0.0272
etree insert_from_document (T1,T2 ) 24.8505 24.1553 25.6988 msec/pass, best: 24.1553
ElementTree insert_from_document (T1,T2 ) 8.7017 9.8994 9.8052 msec/pass, best: 8.7017
cElementTree insert_from_document (T1,T2 ) 1.2120 1.2260 1.2225 msec/pass, best: 1.2120
etree insert_from_document (T1,T3 ) 1.0492 1.1782 1.3616 msec/pass, best: 1.0492
ElementTree insert_from_document (T1,T3 ) 0.0971 0.1012 0.1044 msec/pass, best: 0.0971
cElementTree insert_from_document (T1,T3 ) 0.0451 0.0489 0.0429 msec/pass, best: 0.0429
etree insert_from_document (T1,T4 ) 1.7054 1.8474 1.8518 msec/pass, best: 1.7054
ElementTree insert_from_document (T1,T4 ) 0.2471 0.2510 0.2550 msec/pass, best: 0.2471
cElementTree insert_from_document (T1,T4 ) 0.0815 0.0940 0.0868 msec/pass, best: 0.0815
etree insert_from_document (T2,T1 ) 32.2051 34.0006 34.0085 msec/pass, best: 32.2051
ElementTree insert_from_document (T2,T1 ) 2.2987 3.2959 2.1304 msec/pass, best: 2.1304
cElementTree insert_from_document (T2,T1 ) 0.1201 0.1238 0.1221 msec/pass, best: 0.1201
etree insert_from_document (T2,T3 ) 1.3658 1.2899 1.4140 msec/pass, best: 1.2899
ElementTree insert_from_document (T2,T3 ) 0.1069 0.1094 0.1085 msec/pass, best: 0.1069
cElementTree insert_from_document (T2,T3 ) 0.0470 0.0556 0.0524 msec/pass, best: 0.0470
etree insert_from_document (T2,T4 ) 2.6039 2.7250 2.7508 msec/pass, best: 2.6039
ElementTree insert_from_document (T2,T4 ) 2.2039 2.5299 2.5815 msec/pass, best: 2.2039
cElementTree insert_from_document (T2,T4 ) 0.1059 0.1134 0.1127 msec/pass, best: 0.1059
etree insert_from_document (T3,T1 ) 19.8009 25.0803 23.4647 msec/pass, best: 19.8009
ElementTree insert_from_document (T3,T1 ) 3.0262 4.1957 3.7703 msec/pass, best: 3.0262
cElementTree insert_from_document (T3,T1 ) 0.1040 0.1033 0.0954 msec/pass, best: 0.0954
etree insert_from_document (T3,T2 ) 15.1248 15.4261 16.6505 msec/pass, best: 15.1248
ElementTree insert_from_document (T3,T2 ) 7.8220 8.0915 8.5682 msec/pass, best: 7.8220
cElementTree insert_from_document (T3,T2 ) 1.1612 1.1757 1.2460 msec/pass, best: 1.1612
etree insert_from_document (T3,T4 ) 0.1667 0.4397 0.1828 msec/pass, best: 0.1667
ElementTree insert_from_document (T3,T4 ) 0.2935 0.2366 0.2363 msec/pass, best: 0.2363
cElementTree insert_from_document (T3,T4 ) 0.0566 0.0568 0.0734 msec/pass, best: 0.0566
etree insert_from_document (T4,T1 ) 23.9678 24.8289 24.7205 msec/pass, best: 23.9678
ElementTree insert_from_document (T4,T1 ) 0.2536 0.2725 0.2724 msec/pass, best: 0.2536
cElementTree insert_from_document (T4,T1 ) 0.0970 0.0986 0.0969 msec/pass, best: 0.0969
etree insert_from_document (T4,T2 ) 17.4943 17.6244 18.9083 msec/pass, best: 17.4943
ElementTree insert_from_document (T4,T2 ) 6.4159 6.5594 6.6816 msec/pass, best: 6.4159
cElementTree insert_from_document (T4,T2 ) 1.1943 1.1961 1.2079 msec/pass, best: 1.1943
etree insert_from_document (T4,T3 ) 0.5701 0.5741 0.5685 msec/pass, best: 0.5685
ElementTree insert_from_document (T4,T3 ) 0.1002 0.0967 0.0964 msec/pass, best: 0.0964
cElementTree insert_from_document (T4,T3 ) 0.0336 0.0379 0.0327 msec/pass, best: 0.0327
etree remove_children (T1 ) 6.9888 7.1405 7.1501 msec/pass, best: 6.9888
ElementTree remove_children (T1 ) 10.2381 10.3145 10.3398 msec/pass, best: 10.2381
cElementTree remove_children (T1 ) 1.1740 1.2146 1.2070 msec/pass, best: 1.1740
etree remove_children (T2 ) 8.0086 8.0501 8.0835 msec/pass, best: 8.0086
ElementTree remove_children (T2 ) 171.0074 165.6075 174.0978 msec/pass, best: 165.6075
cElementTree remove_children (T2 ) 4.5207 4.6791 4.7362 msec/pass, best: 4.5207
etree remove_children (T3 ) 0.5668 0.5530 0.5762 msec/pass, best: 0.5530
ElementTree remove_children (T3 ) 3.1857 3.1828 3.2323 msec/pass, best: 3.1828
cElementTree remove_children (T3 ) 0.2588 0.2608 0.2584 msec/pass, best: 0.2584
etree remove_children (T4 ) 0.0684 0.0753 0.0700 msec/pass, best: 0.0684
ElementTree remove_children (T4 ) 0.4579 0.4570 0.4711 msec/pass, best: 0.4570
cElementTree remove_children (T4 ) 0.0209 0.0210 0.0207 msec/pass, best: 0.0207
etree remove_children_reversed (T1 ) 11.9009 11.9145 11.8435 msec/pass, best: 11.8435
ElementTree remove_children_reversed (T1 ) 19.3379 18.8514 20.4126 msec/pass, best: 18.8514
cElementTree remove_children_reversed (T1 ) 2.2264 2.3288 2.2562 msec/pass, best: 2.2264
etree remove_children_reversed (T2 ) 12.9722 14.8116 12.7335 msec/pass, best: 12.7335
ElementTree remove_children_reversed (T2 ) 673.7946 684.9349 669.5603 msec/pass, best: 669.5603
cElementTree remove_children_reversed (T2 ) 13.0890 12.8449 12.9061 msec/pass, best: 12.8449
etree remove_children_reversed (T3 ) 0.5227 0.5268 0.5229 msec/pass, best: 0.5227
ElementTree remove_children_reversed (T3 ) 4.4230 5.2407 4.4353 msec/pass, best: 4.4230
cElementTree remove_children_reversed (T3 ) 0.4222 0.4244 0.4180 msec/pass, best: 0.4180
etree remove_children_reversed (T4 ) 0.0738 0.0731 0.0736 msec/pass, best: 0.0731
ElementTree remove_children_reversed (T4 ) 1.6637 1.6356 1.6363 msec/pass, best: 1.6356
cElementTree remove_children_reversed (T4 ) 0.0510 0.0484 0.0499 msec/pass, best: 0.0484
etree reorder (T1 ) 14.5806 16.2235 15.8373 msec/pass, best: 14.5806
ElementTree reorder (T1 ) 0.8176 2.1794 2.6297 msec/pass, best: 0.8176
cElementTree reorder (T1 ) 0.0634 0.0676 0.0605 msec/pass, best: 0.0605
etree reorder (T2 ) 18.1266 18.8180 18.8672 msec/pass, best: 18.1266
ElementTree reorder (T2 ) 5.5504 5.5097 5.7170 msec/pass, best: 5.5097
cElementTree reorder (T2 ) 1.1481 1.1568 1.1591 msec/pass, best: 1.1481
etree reorder (T3 ) 0.0130 0.0156 0.0155 msec/pass, best: 0.0130
ElementTree reorder (T3 ) 0.0437 0.0459 0.0446 msec/pass, best: 0.0437
cElementTree reorder (T3 ) 0.0244 0.0228 0.0230 msec/pass, best: 0.0228
etree reorder (T4 ) 0.0731 0.0780 0.0734 msec/pass, best: 0.0731
ElementTree reorder (T4 ) 0.1282 0.1242 0.1238 msec/pass, best: 0.1238
cElementTree reorder (T4 ) 0.0217 0.0218 0.0220 msec/pass, best: 0.0217
etree reorder_slice (T1 ) 14.5325 17.0733 15.9148 msec/pass, best: 14.5325
ElementTree reorder_slice (T1 ) 0.5114 1.8668 2.6623 msec/pass, best: 0.5114
cElementTree reorder_slice (T1 ) 0.0629 0.0636 0.0633 msec/pass, best: 0.0629
etree reorder_slice (T2 ) 19.0733 22.6151 20.3017 msec/pass, best: 19.0733
ElementTree reorder_slice (T2 ) 5.5578 5.8006 5.7953 msec/pass, best: 5.5578
cElementTree reorder_slice (T2 ) 1.1598 1.1522 1.1647 msec/pass, best: 1.1522
etree reorder_slice (T3 ) 0.0145 0.0135 0.0133 msec/pass, best: 0.0133
ElementTree reorder_slice (T3 ) 0.0421 0.0435 0.0434 msec/pass, best: 0.0421
cElementTree reorder_slice (T3 ) 0.0225 0.0221 0.0229 msec/pass, best: 0.0221
etree reorder_slice (T4 ) 0.0796 0.0779 0.0786 msec/pass, best: 0.0779
ElementTree reorder_slice (T4 ) 0.1390 0.1334 0.1426 msec/pass, best: 0.1334
cElementTree reorder_slice (T4 ) 0.0259 0.0219 0.0217 msec/pass, best: 0.0217
etree replace_children (T1 ) 7.4184 7.9814 8.2130 msec/pass, best: 7.4184
ElementTree replace_children (T1 ) 19.4359 19.5994 19.5809 msec/pass, best: 19.4359
cElementTree replace_children (T1 ) 2.0112 2.0221 2.0522 msec/pass, best: 2.0112
etree replace_children (T2 ) 17.0823 19.4184 20.3127 msec/pass, best: 17.0823
ElementTree replace_children (T2 ) 26.4215 26.6201 26.9273 msec/pass, best: 26.4215
cElementTree replace_children (T2 ) 2.9001 2.8836 2.8504 msec/pass, best: 2.8504
etree replace_children (T3 ) 0.6777 0.6651 0.6562 msec/pass, best: 0.6562
ElementTree replace_children (T3 ) 5.2446 4.5064 4.6229 msec/pass, best: 4.5064
cElementTree replace_children (T3 ) 0.4712 0.4945 0.4554 msec/pass, best: 0.4554
etree replace_children (T4 ) 0.4540 0.5324 0.4619 msec/pass, best: 0.4540
ElementTree replace_children (T4 ) 0.3328 0.3317 0.3333 msec/pass, best: 0.3317
cElementTree replace_children (T4 ) 0.0388 0.0385 0.0382 msec/pass, best: 0.0382
etree rotate_children (T1 ) 27.4596 27.0203 27.8874 msec/pass, best: 27.0203
ElementTree rotate_children (T1 ) 1.2427 1.2087 1.1850 msec/pass, best: 1.1850
cElementTree rotate_children (T1 ) 0.1627 0.1654 0.1633 msec/pass, best: 0.1627
etree rotate_children (T2 ) 7.2919 7.9870 7.1657 msec/pass, best: 7.1657
ElementTree rotate_children (T2 ) 2.2686 2.5049 1.8473 msec/pass, best: 1.8473
cElementTree rotate_children (T2 ) 0.4213 0.4067 0.4378 msec/pass, best: 0.4067
etree rotate_children (T3 ) 3.9796 3.9531 4.7094 msec/pass, best: 3.9531
ElementTree rotate_children (T3 ) 0.6443 0.5682 0.5796 msec/pass, best: 0.5682
cElementTree rotate_children (T3 ) 0.1355 0.1322 0.1368 msec/pass, best: 0.1322
etree rotate_children (T4 ) 0.3995 0.3204 0.3173 msec/pass, best: 0.3173
ElementTree rotate_children (T4 ) 0.5233 0.5198 0.5278 msec/pass, best: 0.5198
cElementTree rotate_children (T4 ) 0.1210 0.1199 0.1275 msec/pass, best: 0.1199
etree set_attributes (T1 ) 6.0470 6.6676 6.6880 msec/pass, best: 6.0470
ElementTree set_attributes (T1 ) 0.1447 0.1446 0.1479 msec/pass, best: 0.1446
cElementTree set_attributes (T1 ) 0.0691 0.0665 0.0666 msec/pass, best: 0.0665
etree set_attributes (T2 ) 8.8447 9.5652 9.4956 msec/pass, best: 8.8447
ElementTree set_attributes (T2 ) 1.6476 1.6582 1.6447 msec/pass, best: 1.6447
cElementTree set_attributes (T2 ) 0.7479 0.7352 0.7474 msec/pass, best: 0.7352
etree set_attributes (T3 ) 0.0568 0.0928 0.0583 msec/pass, best: 0.0568
ElementTree set_attributes (T3 ) 0.0625 0.0613 0.0658 msec/pass, best: 0.0613
cElementTree set_attributes (T3 ) 0.0272 0.0240 0.0255 msec/pass, best: 0.0240
etree set_attributes (T4 ) 0.1534 0.1562 0.1530 msec/pass, best: 0.1530
ElementTree set_attributes (T4 ) 0.0779 0.0759 0.0762 msec/pass, best: 0.0759
cElementTree set_attributes (T4 ) 0.0268 0.0282 0.0261 msec/pass, best: 0.0261
etree setget_attributes (T1 ) 5.4190 6.6268 6.6813 msec/pass, best: 5.4190
ElementTree setget_attributes (T1 ) 0.2305 0.2438 0.2276 msec/pass, best: 0.2276
cElementTree setget_attributes (T1 ) 0.1521 0.0983 0.0920 msec/pass, best: 0.0920
etree setget_attributes (T2 ) 10.5145 11.2669 11.2211 msec/pass, best: 10.5145
ElementTree setget_attributes (T2 ) 3.2395 3.1300 3.1196 msec/pass, best: 3.1196
cElementTree setget_attributes (T2 ) 1.1320 1.1729 1.1571 msec/pass, best: 1.1320
etree setget_attributes (T3 ) 0.0784 0.0807 0.0913 msec/pass, best: 0.0784
ElementTree setget_attributes (T3 ) 0.0977 0.0835 0.0889 msec/pass, best: 0.0835
cElementTree setget_attributes (T3 ) 0.0295 0.0285 0.0333 msec/pass, best: 0.0285
etree setget_attributes (T4 ) 0.2418 0.2438 0.2392 msec/pass, best: 0.2392
ElementTree setget_attributes (T4 ) 0.1654 0.1779 0.1539 msec/pass, best: 0.1539
cElementTree setget_attributes (T4 ) 0.0476 0.0458 0.0506 msec/pass, best: 0.0458