-2

次の関数の引数でリストを使用します。

def myFunct(myList):
  print(myList) # display [0,1]
  myModifiedList = list(myList)
  myModifiedList[0]=-1
  print(myList) # display [-1,1]
  return myModifiedList

もちろん、関数myListの2番目の印刷で[0,1]を表示したいと思います。ここで何が問題なのかわかりません。Pythonのすべてが参照によって機能することを知っています。ただし、私の関数array_copyは、私が抱えている問題を回避するのに役立つはずです。

編集:「奇妙な」メソッドを削除しましたが、それでも問題が発生します。

4

3 に答える 3

3

まず、コードは[0, 1]2回出力され、[0, 1]その後に。が続きません[-1, 1]。これは完璧だと言っているのではありません。

1つのバグは次のとおりです。

for i in array:
   copy.append(array[i])

iインデックスではなく、リスト要素を繰り返し処理します。したがって、を読む必要があります。array[i]i

実際、array_copy()機能全体は不要です。置き換えることができます:

myModifiedList = array_copy(myList)

myModifiedList = myList[:]

リストの(浅い)コピーを作成します。

于 2013-03-16T15:32:12.337 に答える
2

リストをコピーする正しい方法を使用して、この動作を再現することはできません。

>>> mylist = [0, 1]
>>> modified = list(mylist)
>>> modified[0] = -1
>>> print(mylist)
[0, 1]

質問にあるコードを実際に実行しましたか?NPEが指摘しているように、コピー機能には本質的に欠陥があります。いつものように、最善の答えは、車輪の再発明を行わず、組み込みの方法を使用することです。

于 2013-03-16T15:32:06.457 に答える
0
>>> a=[0,1]
>>> print a
[0, 1]
>>> b=a
>>> b[0]=-1
>>> print a
[-1, 1]
>>> c=list(a)
>>> c[0]=3
>>> print a
[-1, 1]
>>> print c
[3, 1]
>>> print b
[-1, 1]
>>> 
于 2015-05-07T21:28:52.233 に答える