2017-11-03 8 views
1

を変更する私のコードです:変更するインスタンス変数は、ここで元のリストに

class Foo(object): 
    def __init__(self, x, y): 
     self.x  = x 
     self.y  = y 

    def func(self): 
     self.x[0] -= 1 
     self.y -= 1 


x = [10] 
y = 10 



a = Foo(x, y) 
a.func() 

print(x, y) 

出力が([9], 10)です。インスタンス変数にリストを渡してからインスタンス変数を変更すると、元のリストも変更されますが、元のリストは変更されません。

リストをPythonのインスタンス変数に渡して元のリストに影響を与えずにインスタンス変数を変更するにはどうすればよいですか?

+0

Pythonの変数と割り当てのクイックガイドを持っています:https://nedbatchelder.com/text/names.html – user2357112

+0

また、Python 3を使っていると思うかもしれませんが、 'print'という出力はあなたが。 (Python 3は '[9] 10'を出力します) – user2357112

+0

ありがとう、これが助けになりました! self.x = list(x)はそれを解いた –

答えて

1

これはリストが変更可能であり、整数が不変であるためです。リストを変更すると、同じリストが返されます。整数を変更すると、整数の「コピー」が返されます。したがってfuncxを変更していますが、新しいものを作成していますy

0

リストは可変オブジェクトです。割り当てによって参照がコピーされるため、ある要素の値を変更すると元のオブジェクトが変更されます。

整数は変更できません。値を変更すると、Pythonは新しい値を持つ新しいオブジェクトへの参照を変更します。 self.yは、yと同じオブジェクトをこれ以上参照しません。

関連する問題