在我看来一个对象的copy至少也得改小引用吧。
但python的不是。
sqlalchemy
我是这样做的:
wendy = session.query(User).filter_by(name='wendy').one()
In [3]: wendy
Out[3]: <User('wendy','Wendy Williams','foobar')>
In [7]: import copy
In [10]: clone_user = copy.deepcopy(wendy)
In [11]: clone_user
Out[11]: <User('wendy','Wendy Williams','foobar')>
In [12]: clone_user.name='clone_wendy'
In [13]: clone_user
Out[13]: <User('clone_wendy','Wendy Williams','foobar')>
In [14]: wendy
Out[14]: <User('wendy','Wendy Williams','foobar')>
In [15]: session.add(clone_user)
-------------------------------------
然后出错了。。。
/Users/yautou/work/python/youjia/ENV/lib/python2.7/site-packages/sqlalchemy/orm/identity.pyc in add(self, state)
117 "A conflicting state is already "
118 "present in the identity map for key %r"
--> 119 % (key, ))
120 else:
121 return
AssertionError: A conflicting state is already present in the identity map for key (<class '__main__.User'>, (1,))
但python的不是。
sqlalchemy
我是这样做的:
wendy = session.query(User).filter_by(name='wendy').one()
In [3]: wendy
Out[3]: <User('wendy','Wendy Williams','foobar')>
In [7]: import copy
In [10]: clone_user = copy.deepcopy(wendy)
In [11]: clone_user
Out[11]: <User('wendy','Wendy Williams','foobar')>
In [12]: clone_user.name='clone_wendy'
In [13]: clone_user
Out[13]: <User('clone_wendy','Wendy Williams','foobar')>
In [14]: wendy
Out[14]: <User('wendy','Wendy Williams','foobar')>
In [15]: session.add(clone_user)
-------------------------------------
然后出错了。。。
/Users/yautou/work/python/youjia/ENV/lib/python2.7/site-packages/sqlalchemy/orm/identity.pyc in add(self, state)
117 "A conflicting state is already "
118 "present in the identity map for key %r"
--> 119 % (key, ))
120 else:
121 return
AssertionError: A conflicting state is already present in the identity map for key (<class '__main__.User'>, (1,))
