代码之家  ›  专栏  ›  技术社区  ›  abc

List[:]=List在这个基数排序代码中做什么?

  •  0
  • abc  · 技术社区  · 8 年前

    What is wrong with my radix sort?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Matheus Portela    8 年前

    考虑以下情况,这是您试图理解的内容的一个小版本:

    def foo(x):
        x = []
        x.append(1)
        print(x)
    
    my_list = []
    foo(my_list)
    print(my_list)
    

    您期望函数 foo 1 正当事实上,事情并不是这样的。。。

    >>> foo(my_list)
    [1]
    >>> print(my_list)
    []
    

    为什么会这样?

    x = [] ,而不是清除原始列表 更改了局部变量 x 参考新列表 另一方面 my_list 仍参考原始列表!

    x[:] 相反:

    def foo(x):
        x[:] = []
        x.append(1)
        print(x)
    
    my_list = []
    foo(my_list)
    print(my_list)
    

    现在,一切都应该按照您的预期进行:

    >>> foo(my_list)
    [1]
    >>> print(my_list)
    [1]
    

    这个 诀窍基本上是告诉口译员 替换引用的列表内容 通过新的空列表 作为一种副作用,这将改变原始列表。

    how variables are passed by assignment in Python ,特别是如果您不熟悉指针的概念。