13

変数 'a' の値が変更されたときに変数 'b' に自分自身をコピーするように、変数のコピーを作成する方法はありますか?

a='hello'

b=a     #.copy()  or a function that will make a copy

a='bye'

# Is there a way to make 
# 'b' equal 'a' without 
# doing 'b=a'

print a
print b

リストに格納されているチェックボタンがあるTkinterライブラリの使用に問題があり、それが保持する変数を取得しようとしています。

ただし、変数に到達するには約5 行のコードが必要です。

チェックボタン変数が変更されたときに変更される変数のコピーを保持する方法はありますか?

4

5 に答える 5

19

Python が参照をどのように処理するかを調べています。割り当ては、右側のオブジェクトへの参照をバインドするだけです。したがって、これはやや簡単です。

a = 'foo'
b = a
print b is a  #True -- They *are the same object*

ただし、すぐに次のことを行います。

b = 'bar'
b is a  #False -- they're not longer the same object because you assigned a new object to b

これは、変更可能なオブジェクトで非常に興味深いものになります。

a = [1]
b = a
b[0] = 'foo'
print a  #What?? 'a' changed?

この場合、とが同じオブジェクトを参照しているaため、変更されます。に変更を加えると(ミュータブルであるため変更できます)、それらは同じオブジェクトであるため、同じ変更が に表示されます。baba

したがって、質問に答えるには、直接行うことはできませんが、可変型 (リストなど) を使用して持ち歩いている実際のデータを格納する場合は、間接的に行うことができます。


これは、Python コードを操作するときに理解することが非常に重要なことであり、多くの言語が機能する方法ではないため、本当に理解するまでこれについて真剣に考えたり調査したりすることは価値があります。

于 2012-11-24T04:35:42.417 に答える
2

つまり、単純な値の割り当てでは、これを行うことはできません。あなたが見たように:

a=4
b=a
a=5

>>> print b
4

ただし、リストのような変更可能なオブジェクトを使用すると、これを行うことができます。そのような:

a=[1]
b=a
a.append(2)

>>> print a
[1,2]
>>> print b
[1,2]
于 2012-11-24T04:39:05.303 に答える
1

何をしたいかによっては、weakrefモジュールを確認することをお勧めします。

これにより、プライマリオブジェクトを作成しNone、プライマリオブジェクトがなくなるとすぐにいくつかのコピーを作成できます。

于 2012-11-24T04:55:01.130 に答える
0

変数への参照を作成し、別の変数に保持することが可能かどうかを尋ねています。いいえ、これは不可能です。たとえば、変数への参照を作成しますか (PHP の「=&」に似ています)? を参照してください。

于 2012-11-24T04:32:39.910 に答える