为何可在列表推导式中创建类对象而无需逐个赋值给变量?
为什么列表推导式创建类实例无需单独赋值变量也能正常运行?
首先得明确一个核心逻辑:类实例的存活与可使用,根本不需要绑定到单独的命名变量——只要有某个载体(比如列表、字典这类容器)持有它的引用就行。
你提到的variable = Class()只是把实例赋值给单个变量的常规写法,但这绝非硬性要求。来看你给出的代码:
one = [LinkedList() for thing in range(size)]
这段列表推导式会循环size次,每次执行LinkedList()都会生成一个全新的类实例,随后直接把这个实例添加到正在构建的列表中。列表的每个元素就是对应实例的引用——相当于列表替你“保管”了这些实例的引用,所以这些实例不会被Python的垃圾回收机制清理,完全可以正常调用方法、访问属性。
比如之后你想操作第一个实例,直接用one[0]即可;想操作第三个实例就用one[2],本质上和你把每个实例赋值给var1、var2再调用是完全一样的,只是把引用存在了列表里而非单独的变量名中。
总结来说:变量只是引用实例的一种方式,容器也是引用实例的有效方式,只要实例存在被引用的关系,就能正常使用。
内容的提问来源于stack exchange,提问作者Hani
相关产品推荐
相关产品推荐

