首页 > 解决方案 > 为什么我的列表被仅在列表副本上运行的函数更改?

问题描述

所以我有一个列表D = [[1030, 1200], [1300, 1600], [1800, 1830]],我制作了一个名为 E: 的副本,E = D[:]然后我尝试使用函数对其进行操作:covertToMin(E)。但是,该功能也可以在D没有意义的情况下运行,因为它们在内存中具有不同的位置。我很困惑,感谢任何帮助!

    E = D[:]
    for i in range(len(E)):
        for j in range(0,2):
            E[i][j] = convertToMinutes(E[i][j])
    print(id(E))
    print(id(D))
    print(D)
    print(E)

def convertToMinutes(time):

    if time < 1000:
        time = str(time)
        minutes = time[1:]
        hourmin = int(time[0])* 60 

        time = int(minutes) + (hourmin)
    else: 
        time = str(time)
        minutes = time[2:]
        hourmin = int(time[:2]) * 60
        time = int(minutes) + hourmin
    return time

我收到的输出是:

4368232032 
4368231552
[[690, 720], [900, 960], [1080, 1110]]
[[690, 720], [900, 960], [1080, 1110]]

标签: pythonpython-3.xlistobject

解决方案


我建议您使用 python deepcopy来解决您的问题。文档页面很清楚,它将对此有所了解。

import copy
E = copy.deepcopy(D)

推荐阅读