Следующее работает с Python 2 или 3 и работает быстрее, чем с помощью itertools:
EDIT: WARNING:
По-видимому, этот код может висеть в некоторых (странных) ситуациях. В результате я не могу это рекомендовать.
def compare_ast(node1, node2):
if type(node1) != type(node2):
return False
elif isinstance(node1, ast.AST):
for kind, var in vars(node1).items():
if kind not in ('lineno', 'col_offset', 'ctx'):
var2 = vars(node2).get(kind)
if not compare_ast(var, var2):
return False
return True
elif isinstance(node1, list):
if len(node1) != len(node2):
return False
for i in range(len(node1)):
if not compare_ast(node1[i], node2[i]):
return False
return True
else:
return node1 == node2