Do the ICAO and IATA codes for an airport ever change?
Yes it does happen.


A city can build a new airport, in which case it will usually get a new ICAO code, but will get the original IATA (city) code. For example, Oslo changed from Fornebu to Gardemoen - Fornebu is ENFB, Gardemoen is ENGM; the OSL code was Fornebu but uis now Gardemoen.
A city can rename its airport for political reasons, so again the codes are liable to change.
Example 1 is New York - Idlewild KIDL was change to John F Kennedy KJFK
Example 2 is Johannesburg - Jan Smuts International was FAJS, then renamed to Oliver Tambo International FAOR.