Python元组到元组

Python元组到元组,python,python-3.x,tuples,Python,Python 3.x,Tuples,我被困在学校的任务中大约有几天!该问题要求将一个元组复制到一个新元组中,该元组的ID与原始元组不同!这是我当前的代码,但仍然无法获得如何使用不同的ID进行复制 def copy_tree(tree): mylist=[] for items in tree: mylist.append(items) mytuple=tuple(mylist) return mytuple original = (1, 2, 3, 4) Python中的元组是不可变的,因此通常不需要创建副本。这可能就是

我被困在学校的任务中大约有几天!该问题要求将一个元组复制到一个新元组中,该元组的ID与原始元组不同!这是我当前的代码,但仍然无法获得如何使用不同的ID进行复制

def copy_tree(tree):
mylist=[]
for items in tree:
    mylist.append(items)
mytuple=tuple(mylist)
return mytuple
original = (1, 2, 3, 4)

Python中的元组是不可变的,因此通常不需要创建副本。这可能就是为什么除了例如
列表
元组
之外,如果给定参数已经是元组,则不会自动创建新元组的原因:

>>> l = [1,2,3]
>>> list(l) is l  # new list ...
False
>>> t = (1,2,3)
>>> tuple(t) is t # but same tuple
True
但是,您可以先将元组转换为
列表
,然后从该列表创建一个新的
元组

>>> 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

不知道你在找什么,但是:

t1 = (1, 2, 3, 4)
t2 = t1

print(t1)
print(t2)
在这种情况下,t2是t1的字面拷贝/克隆

如前所述,元组是不可变的。如果您想向另一个元组添加元组,可以使用“,”作为分隔符

您可以只添加数字:“t2=t1,1,2,3,4”,这将使它在另一个元组中复制元组


您可以将数字从另一个元组插入到另一个元组,方法是像t2=t1[2],1,2,3那样切片。请修复缩进…您的代码应该可以正常工作。你知道那个“ID”指的是什么吗?另外,元组是不可变的,因此创建副本通常没有多大意义。请参考。关于你的最后一段:我尝试了
k=(1,(2,“3”)
,然后
deepcopy(k)是k
was
True
@StefanPochmann老实说,我没有尝试,但你是对的。看起来也像是
deepcopy
,只有当元组中有一些可变对象时才会复制。它会告诉你k和j虽然有相同的内容(k被复制到j),但它们实际上并不是指同一个内存位置,而是被分配了不同的内存位置。id(变量)将为您提供内存id。可能不同版本的Python的行为有所不同,但似乎
deepcopy
实际上不会创建元组的副本(其所有内容)是不可变的。@AvinashKumar不,它没有向我显示这一点。我试过(在Python3和Python2中)并且
k
j
的ID是相同的。所以你的“答案”对我来说毫无意义。你真的亲自尝试过吗?你有不同的身份证吗?你到底使用了什么Python版本?
t1 = (1, 2, 3, 4)
t2 = t1

print(t1)
print(t2)