Equality of namespaces

#lang racket/base

(eq? (make-base-namespace) (make-base-namespace)) ; --> #f ; ok, understandable.

; Nevertheless:

(let ((ns1 (make-base-namespace)) (ns2 (make-base-namespace)))
  (for/and ((x (in-list (namespace-mapped-symbols (make-base-namespace)))))
    (eq?
      (namespace-variable-value x #t (λ () 'not-retrievable) ns1)
      (namespace-variable-value x #t (λ () 'not-retrievable) ns2)))) ; --> #t ; very nice.

; This is like:

(define object 'aap)
(eq? (λ () object) (λ () object)) ; --> #f
(eq? ((λ () object)) ((λ () object))) ; --> #t

; From the documentation of namespaces I understand that the ‘nevertheless’ is guaranteed.
; Is this a correct understanding?

; I use base-namespaces in my toy interpreters for easy inclusion of Racket procedures,
; retrieved by means of namespace-variable-value.
; The fact that not all procedures can be retrieved this way is not important for me.
; (E.G. procedures with keyword arguments cannot be retrieved this way
; and, of course, macros cannot be retrieved this way either)
; Up to now my toys did not need to rely on the ‘nevertheless’,
; but in future I may want to.

; Is my understanding correct?

; PS. Toy interpreters are a hobby of mine.
; Some can be found on https://github.com/joskoot.