为什么我的列表被一个只操作列表副本的函数所改变?

2024-09-27 00:15:08 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个列表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]]

Tags: 函数inid列表fortime副本range
2条回答

我建议您使用pythondeepcopy解决您的问题。documentation page是清楚的,它会给我们一些启示。你知道吗

import copy
E = copy.deepcopy(D)

我认为问题在于,当您“等于”列表变量(或dict)时,Python不会创建不同的列表。为此,需要使用deepcopy()

在代码中尝试以下操作:

import copy

E = copy.deepcopy(D)

这将生成两个单独的列表。你知道吗

相关问题 更多 >

    热门问题