-1

どのように y を x に等しくするか オブジェクトによって呼び出されるものを呼び出しますが、関数呼び出しはありません どのように動作するか y 値を変更する方法

y = [1, 2, 3]
x = y
x[:] = [-1]*3
print y
[-1, -1, -1]

x と y で何が起こるか、オブジェクトによって何が呼び出されるかを説明してください

4

3 に答える 3

2
y = [1, 2, 3]
x = y

xどちらも同じリストをy指しています。

x[:] = [-1]*3

そのリストは、オブジェクト全体のスライスへの割り当てによって変更されます (こちらを参照)。

print y
# [-1, -1, -1]

変更されたリストがコンソールに出力されます。

ちなみに、「オブジェクトによる呼び出し」はありません。これは単なるスライスへの割り当てです(リンクに記載されているように、オブジェクトを変更します)。

于 2013-05-03T04:56:25.960 に答える
2

そうx=yすることで、同じオブジェクトへの2つの参照を作成するだけで、オブジェクトは変更可能であるため、変更することもできます。

>>> y = [1, 2, 3] 
>>> sys.getrefcount(y)
2
>>> x = y          # now y also points to the same object
>>> sys.getrefcount(y) 
3
>>> x is y
True

次に、メモリ内の同じオブジェクトをポイントしxます。y

X-----------------------|
                        | 
                  --------------
                  | [1, 2, 3]  |
                  |            |
                  |------------|
                        | 
                        | 
Y-----------------------|                  

次に、参照のいずれかを使用してそのオブジェクトを変更します。

>>> x.append(4)    #modify object using either x or y
>>> x,y            
([1, 2, 3, 4], [1, 2, 3, 4])

次に、そのオブジェクトへの参照の 1 つを削除します。y とします。

>>> del y
>>> x        #but you can still access that object using x
[1, 2, 3, 4]
于 2013-05-03T04:56:45.877 に答える
0

リストはpythonのオブジェクトであり、単純な変数ではありません。c ++のポインターと
x=y同じように、ポインターを等しくします.xの変更は、同じオブジェクトが含まれているため、yにも実装されます。

于 2013-05-03T04:57:27.807 に答える