如何从Python中的列表构建新列表?

时间:2016-04-01 13:52:15

标签: python list

我有一个python列表,其中包含一组对象(一个拥有它的类 属性,功能和变量)。我想提取一些列表元素并创建一个新列表。

我的问题是:当我从列表中提取新列表时,它们是否会保持相同,或者它们将被视为该类的新实例?

例如:List layer = [myclass1, myclass2, myclass3]

我想要新列表layernew = [myclass1]或任何此类组合。我该如何提取项目。当我直接打印图层和新图层(通过使用newlayer=layer[0:1])时,我看到它给了我相同的对象实例引用。

2 个答案:

答案 0 :(得分:4)

  

新列表元素是否保持相同,或者当我从列表中提取它们时,它们将被视为该类的新实例。

他们会是一样的。演示:

class Widget:
    def __init__(self, value):
        self.value = value

a = [Widget(4), Widget(8), Widget(15)]
b = a[0:1]

print a[0] is b[0]

输出为True,因此a[0]b[0]是对同一对象的引用。

更改此行为的一种方法是使用copy模块的deepcopy方法。这将尝试复制您提供的对象并返回具有相同值的引用不同对象。

import copy

class Widget:
    def __init__(self, value):
        self.value = value

a = [Widget(4), Widget(8), Widget(15)]
b = copy.deepcopy(a[0:1])

print a[0] is b[0]
#result: False

答案 1 :(得分:2)

它们是完全相同的对象。您可以在python中使用is进行身份测试。

layernew[0] is layer[0]  # True