В вашем timeConvert1
вы выполняете назначение среза, которое вносит изменения в исходный список, поэтому при возврате schedule
вы видите необходимые изменения, примененные к нему.В вашем timeConvert2
вы создаете новый список, но возвращаете старый неизмененный список, поэтому вы не видите в нем необходимых изменений.Я добавил небольшой фрагмент режима ниже, чтобы проиллюстрировать этот
def timeConvert2(schedule):
for eachClass in schedule:
print("ID before: {}".format(id(eachClass)))
eachClass = ["time" if x[2] == ':' else x for x in eachClass]
print("ID after: {}".format(id(eachClass)))
return schedule
timeConvert2([["abc", "09:09", "10:10"], ["def", "11:11", "12:12"]])
ВЫХОД
ID before: 139823659735560
ID after: 139823659759816
[['abc', '09:09', '10:10'], ['def', '11:11', '12:12']]
Вы можете видеть, что ID
из eachClass
изменилсядо и после присвоения, что по существу означает, что вы создали новый объект.
def timeConvert1(schedule):
for eachClass in schedule:
print("ID before: {}".format(id(eachClass)))
eachClass[:] = ["time" if x[2] == ':' else x for x in eachClass]
print("ID after: {}".format(id(eachClass)))
return schedule
timeConvert1([["abc", "09:09", "10:10"], ["def", "11:11", "12:12"]])
ВЫХОД
ID before: 139823659594440
ID after: 139823659594440
[['abc', 'time', 'time'], ['def', '11:11', '12:12']]
Вы можете видеть, что ID
из eachClass
не изменился до и после назначения, что по сути означает, что вы работаете с одним и тем же объектом.
Надеюсь, это поможет!