Being an example of my updates to the Python part of the GeSHi syntax highlighter. You can download the source as well.

Code mostly copied from the Python Cookbook.

Old version (jump to new version)

 
class foo(bar):
    def __init__(self, dict):
        self.__dict__.update(dict)
 
if __name__ == '__main__':
    d = {1:2, 3:4, 5:6}
    o = foo(d)
    print o
 
""" Two-pass pairing heap with multipass auxiliary list
 
This recipe adds a multipass auxiliary list to Tim Peter's code
for a two-pass pairing heap presented at [...] 
"""
 
from collections import deque
 
def _link(x, y):
    if x[0] <= y[0]:
        x.append(y)
        return x
    else:
        y.append(x)
        return y
 
def _merge(x):
    n = len(x)
    if n == 1:
        return []
    pairs = [_link(x[i], x[i+1]) for i in xrange(1, n-1, 2)]
    if n & 1 == 0:
        pairs.append(x[-1])
    pairs.reverse()
    x = pairs.pop()
    for i in pairs:
        x = _link(i, x)
    return x
 
class AuxList(deque):
 
    def multipass(self):
        while len(self) > 1:
            self.appendleft(_link(self.pop(), self.pop()))
        return self.pop()
 

Old version (jump to new version)

class Heap:
 
    def __init__(self, iterable=[]):
        self.x = []
        self.aux = AuxList([[value] for value in iterable])
 
    def __nonzero__(self):
        return bool(self.x)
 
    def push(self, value):
        self.aux.append([value])
 
    def pop(self):
        if self.aux:
            self.x += self.aux.multipass()
        result = self.x[0]  # raises IndexError if empty
        self.x = _merge(self.x)
        return result
 
    def __getitem__(self, i):
        'Hack to make sorting as easy as:  list(Heap(input))'
        return self.pop()    
 
## Example call
>>> print list(Heap('abracadabra'))
['a', 'a', 'a', 'a', 'a', 'b', 'b', 'c', 'd', 'r', 'r']
 
class MyClass:
    …
    def __getitem__(self, index):
        …
    def __setitem__(self, index, value):
        …
    def __delitem__(self, index):
        …
 
    if sys.version_info < (2, 0):
        # They won't be defined if version is at least 2.0 final
 
        def __getslice__(self, i, j):
            return self[max(0, i):max(0, j):]
        def __setslice__(self, i, j, seq):
            self[max(0, i):max(0, j):] = seq
        def __delslice__(self, i, j):
            del self[max(0, i):max(0, j):]

New version (jump to old version)

 
class foo(bar):
    def __init__(self, dict):
        self.__dict__.update(dict)
 
if __name__ == '__main__':
    d = {1:2, 3:4, 5:6}
    o = foo(d)
    print o
 
""" Two-pass pairing heap with multipass auxiliary list
 
This recipe adds a multipass auxiliary list to Tim Peter's code
for a two-pass pairing heap presented at [...]
"""
 
from collections import deque
 
def _link(x, y):
    if x[0] <= y[0]:
        x.append(y)
        return x
    else:
        y.append(x)
        return y
 
def _merge(x):
    n = len(x)
    if n == 1:
        return []
    pairs = [_link(x[i], x[i+1]) for i in xrange(1, n-1, 2)]
    if n & 1 == 0:
        pairs.append(x[-1])
    pairs.reverse()
    x = pairs.pop()
    for i in pairs:
        x = _link(i, x)
    return x
 
class AuxList(deque):
 
    def multipass(self):
        while len(self) > 1:
            self.appendleft(_link(self.pop(), self.pop()))
        return self.pop()
 

New version (jump to old version)

class Heap:
 
    def __init__(self, iterable=[]):
        self.x = []
        self.aux = AuxList([[value] for value in iterable])
 
    def __nonzero__(self):
        return bool(self.x)
 
    def push(self, value):
        self.aux.append([value])
 
    def pop(self):
        if self.aux:
            self.x += self.aux.multipass()
        result = self.x[0]  # raises IndexError if empty
        self.x = _merge(self.x)
        return result
 
    def __getitem__(self, i):
        'Hack to make sorting as easy as:  list(Heap(input))'
        return self.pop()    
 
## Example call
>>> print list(Heap('abracadabra'))
['a', 'a', 'a', 'a', 'a', 'b', 'b', 'c', 'd', 'r', 'r']
 
class MyClass:
    …
    def __getitem__(self, index):
        …
    def __setitem__(self, index, value):
        …
    def __delitem__(self, index):
        …
 
    if sys.version_info < (2, 0):
        # They won't be defined if version is at least 2.0 final
 
        def __getslice__(self, i, j):
            return self[max(0, i):max(0, j):]
        def __setslice__(self, i, j, seq):
            self[max(0, i):max(0, j):] = seq
        def __delslice__(self, i, j):
            del self[max(0, i):max(0, j):]