函数对Python列表的作用范围是多少?

Rah*_*hul 5 python python-2.7

我无法弄清楚这里发生了什么.附加range函数的引用就是在索引处创建递归列表3.

>>> x = range(3)
[0, 1, 2]
>>> x.append(x)
[0, 1, 2, [...]]
>>> x[3][3][3][3][0] = 5
[5, 1, 2, [...]]
Run Code Online (Sandbox Code Playgroud)

然而,当我尝试这个:

 >>> x = range(3)
 [0, 1, 2]
 >>> x.append(range(3))
 [0, 1, 2, [0, 1, 2]]
Run Code Online (Sandbox Code Playgroud)

我可以很容易地推断出第二种情况的原因,但是无法理解range函数的附加引用对附加的列表做了什么.

Kar*_*ath 9

在python2中,ranges是lists.

lists,python中的大多数东西都是具有身份的对象.

li = [0,1]
li[1] = li    # [0, [...]]
              # ^----v
id(li)        # 2146307756
id(li[1])     # 2146307756
Run Code Online (Sandbox Code Playgroud)

既然你把里面的名单本身,你要创建一个递归的数据结构.

  • 请注意,这是Python 2特有的.在Python 3中,范围完全不同,返回一个懒惰评估的`range`对象,而不是列表. (4认同)