Pythonのタプルは不変なので、通常はコピーを作成する必要はありません。これはおそらく理由です。
>>> l = [1,2,3]
>>> list(l) is l # new list ...
False
>>> t = (1,2,3)
>>> tuple(t) is t # but same tuple
True
あなたは、しかし、最初のlist
にタプルを変換し、そのリストから新しいtuple
を作成することができます与えられたパラメータがすでにタプルの場合list
、tuple
は自動的に新しいタプルを作成しないます。
>>> tuple(list(t)) == t # equal ...
True
>>> tuple(list(t)) is t # ... but not the same
False
>>> id(tuple(list(t))), id(t) # different id
(139852830618896, 139852830618752)
これは基本的にあなたが現在行っていることですが、いくつかの行が追加されていますが、コードは実際にうまくいくはずです。
ただし、これはがコピーされていないタプルの浅いコピー、タプル内すなわちオブジェクト(何らかの他のタプル、リストなど)を作成すること。それらをコピーする必要がある場合は、他の回答と同様にcopy.deepcopy
を使用してください。しかし、これは、あまりにも、(ネスト)のみタプルならば、それはコピーを作成しないように「スマート」であることは不変の値が含まれています
>>> k = (1, (2, "3")) # all immutable
>>> copy.deepcopy(k) is k
True
>>> k = (1, (2, "3", [])) # contains mutable list
>>> copy.deepcopy(k) is k
False
あなたのインデントを修正してくださいT2 = T1のようにそれをスライスして別のものに別のタプルから番号を挿入することができ... – DavidG
あなたのコードが正常に動作する必要があります。あなたは "ID"が何を指しているのか知っていますか?また、タプルは不変なので、通常コピーを作成することはあまり意味がありません。 –
[最小限の、完全で検証可能な例を作成する方法](https://stackoverflow.com/help/mcve)を参照してください。 –