• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MKT-porter
博客园    首页    新随笔    联系   管理    订阅  订阅
3D高斯代码解读(1)

 

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

posted on 2024-08-26 14:00  MKT-porter  阅读(122)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3