Неожиданное поведение после использования «глубокой копии» - PullRequest
0 голосов
/ 13 октября 2018

Когда я запускаю следующий код, он не изменяет список, сгенерированный с помощью 'deepcopy', т.е. я получаю 'mt1' без изменений.Если я применил тот же код к «mt», я получу желаемый результат!

def subDic(f):
    w = random.randint(2, int(0.7*len(f)))
    s = random.randint(0, len(f)-w)
    idSub = {}
    for i in range(s, s+w):
        idSub[i] = f[i]
    return idSub


ft = [(2,3), (4,8), (1,0), (7,1)]
mt = copy.deepcopy(ft)
random.shuffle(mt)
mt1 = copy.deepcopy(mt)

ftDic = subDic(ft)
for e in mt1:
    if e in ftDic.values():
        mt1.remove(e)

1 Ответ

0 голосов
/ 13 октября 2018

Вы не должны перебирать mt1 при удалении его значений.

Попробуйте что-то вроде этого:

def subDic(f):
    w = random.randint(2, int(0.7*len(f)))
    s = random.randint(0, len(f)-w)
    idSub = {}
    for i in range(s, s+w):
        idSub[i] = f[i]
    return idSub


ft = [(2,3), (4,8), (1,0), (7,1)]
mt = copy.deepcopy(ft)
random.shuffle(mt)
mt1 = copy.deepcopy(mt)

ftDic = subDic(ft)
for e in ftDic.values():
    mt1.remove(e)
...