Source: https://pageperso.lis-lab.fr/stefano.facchini/python/slides3.pdf