Qual é o formato de um objeto de tag git e como calcular seu SHA?

Estou familiarizado comcomo o Git cria hashes SHA1 para arquivos (blobs), mas não como eles são criados para objetos de tag. Eu suponho que eles são, se eu criar uma tag anotada, mas qual é a receita? E como posso replicá-lo fora do Git (por exemplo, em Perl ou Python)?