Pydantic 模型在传递给另一个模型时被复制

mik*_*sus 4 python pydantic

Pydantic 在将模型传递给另一个模型的构造函数时复制模型。这失败了:

from pydantic import BaseModel

class Child(BaseModel):
    pass
    
class Parent(BaseModel):
    child: Child
        
child = Child()
parent = Parent(child=child)
assert parent.child is child
# Fails
Run Code Online (Sandbox Code Playgroud)

当将其传递给父级的构造函数时,它似乎被复制,因此和 的child标识不相同。我希望它们与我稍后需要修改的属性相同,并且更改应该在.childparent.childchildparent.child

如何让 Pydantic 不复制孩子?

mik*_*sus 8

我自己找到了答案。似乎这是一个问题,但已通过创建配置选项在 PR 中修复。如果针对子项设置此选项,则不会在构造中复制子项。 copy_on_model_validationFalse

这不会复制孩子:

from pydantic import BaseModel

class Child(BaseModel):
    class Config:
        copy_on_model_validation = False

class Parent(BaseModel):
    child: Child

child = Child()
parent = Parent(child=child)
assert parent.child is child
# Passes
Run Code Online (Sandbox Code Playgroud)