def structurally_match(self, o):
<EOL>if self.op != o.op:<EOL><INDENT>return False<EOL><DEDENT>if len(self.args) != len(o.args):<EOL><INDENT>return False<EOL><DEDENT>for arg_a, arg_b in zip(self.args, o.args):<EOL><INDENT>if not isinstance(arg_a, Base):<EOL><INDENT>if type(arg_a) != type(arg_b):<EOL><INDENT>return False<EOL><DEDENT>if arg_a != arg_b:<EOL><INDENT>return False<EOL><DEDENT>else:<EOL><INDENT>continue<EOL><DEDENT><DEDENT>if arg_a.op in operations.leaf_operations:<EOL><INDENT>if arg_a is not arg_b:<EOL><INDENT>return False<EOL><DEDENT><DEDENT>else:<EOL><INDENT>if not arg_a.structurally_match(arg_b):<EOL><INDENT>return False<EOL><DEDENT><DEDENT><DEDENT>return True<EOL>
Structurally compares two A objects, and check if their corresponding leaves are definitely the same A object
(name-wise or hash-identity wise).

:param o: the other claripy A object
:return: True/False