Le terme espace de noms (namespace) désigne en informatique un lieu abstrait conçu pour accueillir des ensembles de termes appartenant à un même répertoire, comme dans l'exemple suivant où les espaces de noms sont nommés « Jean-Paul » et « Jean-Pierre » :
Un espace de noms peut être vu comme une fonction F qui, à un ensemble de symboles S, associe un ensemble O d'objets (à prendre au sens large). Ces objets peuvent être des entiers, des réels, des objets informatiques, des lieux, des personnes, etc.
Selon le contexte, les symboles d'un espace de noms peuvent prendre plusieurs formes.
Dans le cas d'un réseau Ethernet, les symboles sont les adresses MAC qui sont des chaînes d'entiers de 48 bits. Dans un programme informatique, les symboles sont des chaînes de caractères de longueur variables. Dans certains langages, ils peuvent être préfixé par un $ (un sigil) ou d'autres symboles pour indiquer leur nature. Dans le cas d'une base de données, chaque enregistrement est représenté par une ou plusieurs clés apparaissant sous la forme d'entiers (numéro d'enregistrement) ou de chaînes de caractères.
Selon le cas, un espace de noms peut être une fonction injective seulement, surjective seulement, les deux ou ni l'un ni l'autre.
En programmation informatique, les espaces de noms sont généralement des injections seulement car s'il y a deux objets nommés distincts alors leur nom est différent et un objet nommé peut avoir plusieurs noms.
Dans le cas d'un réseau Ethernet, les espaces de noms sont des bijections car chaque carte réseau a une adresse Ethernet unique et, à partir d'une telle carte, il est possible de retrouver l'adresse Ethernet correspondante.
Enfin, s'il y a un ensemble d'écoliers dans une classe et considérons leur prénom comme ensemble de symboles, l'espace de noms est surjectif seulement. En effet, tous les écoliers ont un prénom, mais plusieurs peuvent avoir le même prénom. Ce dernier cas aussi arrive parfois en programmation dans plusieurs situations (ex. : table de hachage), ce qui produit des collisions.