2016-04-01 24 views
0

私は、一連のオブジェクト(独自の のプロパティと関数と変数を持つクラス)を含むpythonリストを持っています。私はいくつかのリスト要素を抽出し、新しいリストを作成したいと思います。Pythonのリストから新しいリストを作成するには?

私の質問は次のとおりです。リストからそれらを抽出すると、新しいリスト要素が同じままになるか、クラスの新しいインスタンスと見なされますか?例えば

List layer = [myclass1, myclass2, myclass3]

私は新しいリストlayernew = [myclass1]または任意のこのような組み合わせをしたいです。どのようにアイテムを抽出できますか?レイヤーと新しいレイヤーを(newlayer=layer[0:1]を使って)直接印刷すると、オブジェクトの同じインスタンス参照が得られることがわかります。

+0

質問があれば、私の新しいリストの項目は同じです、はい、そうです。オブジェクトに参照をコピーするだけです。リストには参照のみが含まれます – Whitefret

+0

リストにはオブジェクトが含まれていません。オブジェクトには* references *が含まれています。ところで、「セット」を意味しない限り、「オブジェクトのセット」というフレーズを使用しないでください。混乱します。 – cdarke

答えて

4

同じままになるだろう、新しいリストelmentsですか私は、リストからそれらを取り出すときには、クラスの新しいインスタンスとみなされます。

これらは同じです。デモ:

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]は、同じオブジェクトへの参照です。

この動作を変更する方法の1つは、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 
+0

ディープコピーの説明と参照をありがとう。答えを受け入れたいが、現時点ではできない。 – user3840530

+0

こんにちは、私のオブジェクトのインスタンスが台無しになっていた。 Deepcopyは本当に問題を解決しました。ありがとう、トン! – user3840530

+0

@ user3840530:まあ、今この回答を受け入れることができると思いますか? – vaultah

2

これらはまったく同じオブジェクトです。 Pythonでisでアイデンティティテストを行うことができます。

layernew[0] is layer[0] # True 
+0

迅速な対応をありがとう。 – user3840530