Если в статическом языке ты объявляешь переменную типа byte, то она занимает памяти ровно один байт. Если объявляешь float, то она занимает 4 байта. Конкретный адрес, конкретный размер.
В динамических языках ты объявляешь переменную байт, она занимает 1 байт в одном месте памяти. Потом ты меняешь её тип на флоат, и она занимает 4 байта в другом месте памяти. Потому что в том окне зарезервирован только 1 байт.
И теперь, если у нас огромный массив данных, который меняется по типам то всю эту кашу надо размещать в новых областях, тратить процессорное время на эту кухню.
Писать не думая заранее о типах удобно, спору нет. Но плата за это удобство - ресурсоёмкость