TL;DR
値を参照の同一性で比べる比較。React は props やメモ化した関数の引数を、Object.is による浅い比較で比べる。
仕組み
memo で包んだコンポーネントは、どれかの props が前回の値と浅い比較で等しくなければ再レンダリングされる。React は各 props を前回の値と Object.is で比べる。Object.is(3, 3) は true だが、Object.is({}, {}) は false になる。
注意点
親が再レンダリングのたびに新しいオブジェクトや配列、関数を作ると、中身が同じでも React は変わったとみなす。これを避けるには、props を必要最小限の個別の値にするか、親の側で useMemo や useCallback を使ってメモ化する。
React.cache の引数の比較も浅い比較なので、プリミティブ値を渡すのがよい。