我有一个python列表,其中包含一组对象(一个拥有它的类 属性,功能和变量)。我想提取一些列表元素并创建一个新列表。
我的问题是:当我从列表中提取新列表时,它们是否会保持相同,或者它们将被视为该类的新实例?
例如:List layer = [myclass1, myclass2, myclass3]
我想要新列表layernew = [myclass1]
或任何此类组合。我该如何提取项目。当我直接打印图层和新图层(通过使用newlayer=layer[0:1]
)时,我看到它给了我相同的对象实例引用。
答案 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