1 Scene和 gaussians 关系
class GaussianModel: def __init__(self, mean): self.mean = mean def set_mean(self, new_mean): self.mean = new_mean class Scene: def __init__(self, gaussians: GaussianModel): self.gaussians = gaussians # 外部的 GaussianModel 实例 external_gaussian = GaussianModel(mean=0) # 创建 Scene 对象时传递外部的 GaussianModel 实例 scene = Scene(gaussians=external_gaussian) # 在 Scene 内部修改 gaussians scene.gaussians.set_mean(10) # 外部查看 GaussianModel 实例的 mean print(external_gaussian.mean) # 输出: 10
在上面的例子中,external_gaussian
和 scene.gaussians
指向同一个 GaussianModel
实例。因此,scene
内部对 gaussians
的修改会同步影响到外部的 external_gaussian
。
总结:
- 实例的共享: 在Python中,类的实例是可变的对象。如果你将一个实例传递给另一个对象(比如
Scene
类的实例),那么两个对象实际上引用的是同一个实例。因此,对该实例的任何修改都会对所有引用这个实例的对象产生影响。 - 同步修改: 因为
gaussians
是一个引用,当你在Scene
中修改gaussians
,这些修改会在Scene
外部的gaussians
实例上同步体现出来。
这种行为适用于所有Python的可变对象,包括列表、字典、集合等。如果你想要避免这种修改同步,可以考虑使用不可变对象或在内部创建实例的拷贝。