-1
def fun(m):
    i=0

    for _ in range(0,len(m)):
      m[_]=m[_]//2
   return m

list=[1,3,6] #User input long value or small value
x=fun(list[:])
print(x)

私の質問は、コードがユーザー入力になった場合、コードの結果がわからないリスト値ですか?

Pythonを見ることができるので :2つのオブジェクトは同じです

>>> a = 4534534
>>> b = a
>>> a is b
True
>>> b = 4534534
>>> a is b
False
>>> a = 1
>>> b = a
>>> a is b
True
>>> b = 1
>>> a is b
True
4

2 に答える 2

1

あなたの質問を正しく読んでいるかどうかわかりません。そのために残念。しかし、あなたのコードは Python で驚くべきことを示しています。これはかなり予想されます。

>>> a = 4534534
>>> b = 4534534
>>> a is b
False

Python は 2 つの別個のオブジェクトを作成しました。これが Python の通常の動作です。

>>> a = 1
>>> b = 1
>>> a is b
True

何?最適化として、Python はプールから小さな整数を共有するため、同じ ID を持つようになります。

それはあなたが尋ねようとしていたものですか?

あなたが書く場合:

m = list[:]

list の浅いコピーが作成され、m に割り当てられます。リストのオブジェクト ID は異なりますが、コンテンツのオブジェクト ID は同じです。リストには不変のintが含まれているため、リストのコピーを参照して元のリストの値を変更することはできません。ただし、リストに変更可能な値 (オブジェクト、dict、またはその他のリストなど) が含まれている場合、リスト内の共有された変更可能なアイテムへの変更は、元のリストに反映されます。

// 演算子は、結果を最も近い整数に切り捨てます。ただし、型は維持されるため、引数の 1 つが float の場合、結果は float になります。

それはあなたの定義が何であるかに依存します

a[0] is b[0]

isオブジェクトが同じである場合は True を返します。つまり、id (ポインタと考えてください) が同じです。オブジェクトが異なる場合は False を返します。ID が異なる場合、値は同じである場合と異なる場合があります値が同じかどうかをテストしたい場合 (これはより一般的です)、== を使用します。

頑張ってください、これがお役に立てば幸いです。

于 2012-11-24T06:03:05.160 に答える
1

list実行時に(変数)が変更されないことが保証されているかどうかを尋ねていると思いますfun(list[:])

intは Python の不変型であるため、完全に安全です。Cpython が使用する小さな整数 (-5 から 256 の範囲) のインターンは、ここでは何も変更しません。コードを使用m[_] //= 2したとしても、整数への新しい参照が暗黙的に作成され、コピーされたファイルに格納されるため、問題ありません。リスト(オリジナルではありません)。

補足としてlist、変数の名前は不適切です。組み込みのリスト型を隠しています。

于 2012-11-24T06:03:28.887 に答える