From f07c6784b6d4d9931aafd3ddd0e5d1016886cea0 Mon Sep 17 00:00:00 2001 From: Jakub Stasiak Date: Wed, 4 Jun 2014 11:21:29 +0100 Subject: Remove another clone->clone reference cycle --- lib/sqlalchemy/sql/visitors.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/sqlalchemy/sql/visitors.py b/lib/sqlalchemy/sql/visitors.py index d9ad04fc0..5bbbb40e2 100644 --- a/lib/sqlalchemy/sql/visitors.py +++ b/lib/sqlalchemy/sql/visitors.py @@ -26,6 +26,7 @@ http://techspot.zzzeek.org/2008/01/23/expression-transformations/ from collections import deque from .. import util import operator +import weakref from .. import exc __all__ = ['VisitableType', 'Visitable', 'ClauseVisitor', @@ -306,8 +307,9 @@ def replacement_traverse(obj, opts, replace): else: if elem not in cloned: cloned[elem] = newelem = elem._clone() - newelem._copy_internals(clone=clone, **kw) + newelem._copy_internals(clone=weak_clone, **kw) return cloned[elem] + weak_clone = weakref.proxy(clone) if obj is not None: obj = clone(obj, **opts) -- cgit v1.2.1