love_qj 发表于 2020-9-27 09:55:38

关于深度拷贝问题

list1 =
L1 = len(list1)   #列表list1的长度
list2 = copy.deepcopy(list1)
count = 0
for i in range(L1):
    for j in range(len(list2)):
      if (list1 == list2):
            count += 1
            if count > 2:
                del(list2)
print(list2)

为什么报错提示 if (list1 == list2):

IndexError: list index out of range

求大哥指点

sunrise085 发表于 2020-9-27 09:55:39

这不是深度拷贝的问题,是因为你在for循环内修改了你要遍历的序列,导致下标溢出
你的内层循环 j 取值为0~14,但是在循环内你修改了list2,使得list2长度小于15了,这样,当你下标较大的时候,就会报错说下标溢出。
两种方法解决问题
第一种,倒序遍历,这样删除的话,也不影响该元素前面的元素的下标
第二种,for遍历list2浅拷贝,而不是遍历下标

你这悬赏还不如不悬赏呢。。。不悬赏,最佳得到的奖励比你这个多多了

hrp 发表于 2020-9-27 10:16:37

你要明白range(len(list2))不是每循环一次就计算一次的,它只在首次循环的时候执行,也就是下标范围已经是固定的了,但你在循环中又修改了列表list2导致长度变短,所以下标就超出范围了。

suchocolate 发表于 2020-9-27 10:33:03

ls1 =
for item in range(len(ls1)):
    if item == 1:
      del ls1
    print(ls1)


# 迭代器初始化后不变
# 删除生成迭代器本身的函数会出out of range

第1次循环:迭代器,使用序号0;循环完成后ls1内容。
第2次循环:迭代器,使用序号1;循环完成后ls1内容。
第3次循环:迭代器,使用序号2;ls1已没有ls1的元素,报错。
页: [1]
查看完整版本: 关于深度拷贝问题