在Python中克隆或复制列表有哪些选项?
在使用时new_list = my_list,每次都会对new_list更改进行任何修改my_list.为什么是这样?
所以我在教自己Python,我遇到了列表问题.我想传递我的函数列表并在保留原始列表的同时弹出项目.如何使python"instance"成为传递的列表,而不是将指针传递给原始列表?
例:
def burninate(b):
c = []
for i in range(3):
c.append(b.pop())
return c
a = range(6)
d = burninate(a)
print a, d
Run Code Online (Sandbox Code Playgroud)
输出:[0,1,2] [
5,4,3 ] 期望输出:[0,1,2,3,4,5] [5,4,3]
谢谢!
original_list = [Object1(), Object2(), Object3()]
copy_list = original_list
original_list.pop()
Run Code Online (Sandbox Code Playgroud)
如果我从原始列表中删除一个对象,我怎样才能保持副本列表不被更改?
原始清单
[<Object.Object instance at 0x00EA29E0>, <Object.Object instance at 0x00EA2DC8>, <Object.Object instance at 0x00EA2EE0>]
Run Code Online (Sandbox Code Playgroud)
弹出原始列表后复制列表(我希望它等于上面的内容)
[<Object.Object instance at 0x00EA29E0>, <Object.Object instance at 0x00EA2DC8>]
Run Code Online (Sandbox Code Playgroud) 我写了一个函数SwapCities,它能够在列表中交换条目3和4.
所以fe [0,1,2,3,4]应该变成[0,1,2,4,3].这个功能很完美,但奇怪的是我的原始列表也改变了我不想要的.
这是我的代码:
def SwapCities(solution):
n = 3##randint(0,NumberOfCities-1)
m = 4##randint(0,NumberOfCities-1)
result = solution
temp1 = solution[n]
temp2 = solution[m]
result[n] = temp2
result[m] = temp1
return result
Run Code Online (Sandbox Code Playgroud)
print "Start"
IncumbentSolution = list(x for x in range(0,NumberOfCities))
print IncumbentSolution
print "After swap" NewSolution = SwapCities(IncumbentSolution)
print NewSolution
print "Original solution"
print IncumbentSolution
Run Code Online (Sandbox Code Playgroud)
我得到以下结果:
How many cities?
8 Start [0, 1, 2, 3, 4, 5, 6, 7]
After swap [0, 1, 2, 4, 3, 5, 6, 7]
Original solution [0, …Run Code Online (Sandbox Code Playgroud)