代码之家  ›  专栏  ›  技术社区  ›  Zaz Volodymyr Null

Python变量怪异?

  •  5
  • Zaz Volodymyr Null  · 技术社区  · 14 年前

    我的Python变量怎么了? old_pos pos :

    pos = [7, 7]
    direction = [1, 1]
    old_pos = pos
    print 'pos     = '+str(pos)
    print 'old_pos = '+str(old_pos)
    pos[0] += direction[0]
    pos[1] += direction[1]
    print 'pos     = '+str(pos)
    print 'old_pos = '+str(old_pos)
    

    输出:

    pos     = [7, 7]
    old_pos = [7, 7]
    pos     = [8, 8]
    old_pos = [8, 8]
    

    old_pos = pos old_pos = tuple(pos) old_pos = list(pos) ,我不明白这个问题:

    pos     = [7, 7]
    old_pos = [7, 7]
    pos     = [8, 8]
    old_pos = [7, 7]
    
    5 回复  |  直到 14 年前
        1
  •  12
  •   recursive    14 年前

    当你说 old_pos = pos ,您没有创建 pos list(pos) 函数,或使用切片表示法 pos[:] .

        2
  •  7
  •   Steven Rumbalski    14 年前

    old_pos = pos pos ,而是创建第二个引用,称为 old_pos 销售时点情报系统 影响所引用的同一对象 旧位置

    以下是制作实际副本而不是第二次引用的3种方法:

    old_pos = pos[:]
    

    使用列表构造函数

    old_pos = list(pos)
    

    from copy import copy
    old_pos = copy(pos)
    

    请注意,这些拷贝都是浅拷贝,在本例中这是很好的。要了解浅拷贝和深拷贝的区别,请阅读 documentation of the copy module .

        3
  •  3
  •   Richard Fearn    14 年前

    old_pos pos

    正确-这是:

    old_pos = pos
    

    旧位置 销售时点情报系统 销售时点情报系统 .

        4
  •  3
  •   c_harm c_harm    14 年前

    >>> pos = [7, 7]
    >>> old_pos = pos
    >>> id(pos)
    4299304472
    >>> id(old_pos)
    4299304472
    

    这叫做 copy 模块。

    >>> from copy import copy
    >>> pos = [7, 7]
    >>> old_pos = pos
    >>> id(pos)
    4299304472
    >>> id(old_pos)
    4299304472
    >>> old_pos = copy(pos)
    >>> id(old_pos)
    4299349240
    
        5
  •  0
  •   PieterJanS    9 年前

    除了上述评论之外,在多维数组的情况下还必须采取一些额外的步骤。例如,当你有一个二维数组 a = [[0,1,2],[3,4],[5,6,7,8]] ,代码 b = a b = [i[:] for i in a]