代码之家  ›  专栏  ›  技术社区  ›  Björn Pollex

如何使两个目录项始终引用相同的浮点值

  •  1
  • Björn Pollex  · 技术社区  · 14 年前

    考虑一下:

    >>> foo = {}
    >>> foo[1] = 1.0
    >>> foo[2] = foo[1]
    >>> foo
    {1: 0.0, 2: 0.0}
    >>> foo[1] += 1.0
    {1: 1.0, 2: 0.0}
    

    事情就是这样。然而,我想要的是最后一行是:

     {1: 1.0, 2: 1.0}
    

    这意味着两者引用相同的值,即使该值发生变化。我知道上面的工作方式是这样的,因为在Python中数字是不可变的。有没有比创建自定义类来存储值更简单的方法?

    2 回复  |  直到 14 年前
        1
  •  1
  •   cji    14 年前

    只有可变对象才有可能,所以必须用 一些

    >>> n = [0]
    >>> d = { 1 : n, 2 : n }
    >>> d
    {1: [0], 2: [0]}
    >>> d[1][0] = 3
    >>> d
    {1: [3], 2: [3]}
    

    但是创建自己的类或对象有什么困难呢?

    >>> n = type( "number", ( object, ), { "val" : 0, "__repr__" : lambda self: str(self.val) } )()
    >>> d = { 1 : n, 2 : n }
    >>> d
    {1: 0, 2: 0}
    >>> d[1].val = 9
    >>> d
    {1: 9, 2: 9}
    

        2
  •  1
  •   mb14    14 年前

    在python中拥有指针的更简单方法是将值打包到列表中。

    >>> foo = {}
    >>> foo[1] = [1.0]
    >>> foo[2] = foo[1]
    
    >>> foo
    {1: [1.0], 2: [1.0]}
    
    >>> foo[1][0]+=100 # note the [0] to write in the list
    
    >>> foo
    {1: [101.0], 2: [101.0]}
    

    作品!