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的可变对象,包括列表、字典、集合等。如果你想要避免这种修改同步,可以考虑使用不可变对象或在内部创建实例的拷贝。
浙公网安备 33010602011771号