Soteric
Все логично. Есть один объект и на него две ссылки: c1 и c2. При присвоении c1 = c2 не происходит копирования объекта, просто одна переменная начинает ссылаться на то же самое значение что и другая. Командой del вы удаляете ссылку, а не сам объект. Когда ссылок не остается, объект удаляется сборщиком мусора. Что здесь выглядит нелогичным?
В каком языке происходит так как вы ожидаете?
А вот что тут нелогично: ОБЕ переменные ССЫЛАЮТСЯ на один и тот же объект. Но если удалить одну, то метод не вызовется, а если удалить другую - вызовется, потому что удалится объект. Но, собственно, указание на удаление объекта дает не пользователь, а сам интерпретатор, считающий тихо себе ссылки. В таком случае использование деструкторов становится менее предсказуемым, а, значит, несколько противоречащим идее питона, как я ее понимаю.
Ну, например C++. Там удаляешь объект - вызывается деструктор. Удаляешь ссылку - не вызывается деструктор. Все четко и логично. А тут все зависит от внутреннего параметра, который, конечно, можно вполне себе выяснить, но это, имхо не очень правильно. Питон прекрасен именно тем, что на нем можно кодить, не особо задумываясь, в отличие от С. А считать количество ссылок на объект, чтобы предугадать результат - суть задумываться)
Повторяюсь: это лично мое мнение, основанное на двух предположениях: 1) Идеология языка питон подразумевает, что действия вызывают наиболее предсказуемый результат. 2) В существующем ключе, использование деструкторов не особо предсказуемо, а, значит, небезопасно.