Py学习  »  问与答

[精华] 这个算循环引用吗?

olivetree • 9 年前 • 5813 次点击  

a=[]

b=[]

a.append(b)

b.append(a)

如果这算循环引用,那这两个列表岂不是嵌套的很深?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/620
 
5813 次点击  
文章 [ 7 ]  |  最新文章 9 年前
meamin9
Reply   •   1 楼
meamin9    9 年前

@爱情的枪 嗯,存储的是一个引用

爱情的枪
Reply   •   2 楼
爱情的枪    9 年前

@meamin9 应该是没有存储实际的数据,因此内存没占多少

meamin9
Reply   •   3 楼
meamin9    9 年前

@olivetree 显示时虽然是用省略的,但是不深。用c.append(c)来说吧,列表c中放了一个c自己的引用。print时,是一个循环显示c,结果显示出了省略号。你可以查看id(c)和id(c[0])是一样的。比方说如果一个链表有一个print_next方法,这个方法输出当前节点的下一个节点的内容,并把下个节点作为当前节点,那么对循环链表调用这个方法就会无限输出节点的内容,但这个链表占的内存还是那么多。

olivetree
Reply   •   4 楼
olivetree    9 年前

@meamin9 @爱情的枪 嵌套不深?输出的结果用省略号表示的,看来是很深的,解释器应该会把这种情况优化吧,只是不知道实现的时候用了什么优化的方式,使得内存没有占满

meamin9
Reply   •   5 楼
meamin9    9 年前

算循环引用吧。嵌套不深。a列表中放的是b的引用,b中放的是a的引用。 如<br /> c=[]<br /> c.append(c)<br /> c中只放了c自身的引用

爱情的枪
Reply   •   6 楼
爱情的枪    9 年前

@olivetree 是的额。。。

olivetree
Reply   •   7 楼
olivetree    9 年前

试了一下,确实很深。。。