ValueError: buffer source array is read-only when derializing a Tree from a readonly buffer.

As observed on our Circle CI and reproduced locally:

```python-traceback
/home/circleci/project/examples/release_highlights/plot_release_highlights_0_24_0.py failed leaving traceback:
Traceback (most recent call last):
  File "/home/circleci/mambaforge/envs/testenv/lib/python3.8/site-packages/sphinx_gallery/gen_gallery.py", line 159, in call_memory
    return 0., func()
  File "/home/circleci/mambaforge/envs/testenv/lib/python3.8/site-packages/sphinx_gallery/gen_rst.py", line 466, in __call__
    exec(self.code, self.fake_main.__dict__)
  File "/home/circleci/project/examples/release_highlights/plot_release_highlights_0_24_0.py", line 211, in <module>
    display = PartialDependenceDisplay.from_estimator(
  File "/home/circleci/project/sklearn/inspection/_plot/partial_dependence.py", line 704, in from_estimator
    pd_results = Parallel(n_jobs=n_jobs, verbose=verbose)(
  File "/home/circleci/project/sklearn/utils/parallel.py", line 63, in __call__
    return super().__call__(iterable_with_config)
  File "/home/circleci/mambaforge/envs/testenv/lib/python3.8/site-packages/joblib/parallel.py", line 1098, in __call__
    self.retrieve()
  File "/home/circleci/mambaforge/envs/testenv/lib/python3.8/site-packages/joblib/parallel.py", line 975, in retrieve
    self._output.extend(job.get(timeout=self.timeout))
  File "/home/circleci/mambaforge/envs/testenv/lib/python3.8/site-packages/joblib/_parallel_backends.py", line 567, in wrap_future_result
    return future.result(timeout=timeout)
  File "/home/circleci/mambaforge/envs/testenv/lib/python3.8/concurrent/futures/_base.py", line 439, in result
    return self.__get_result()
  File "/home/circleci/mambaforge/envs/testenv/lib/python3.8/concurrent/futures/_base.py", line 388, in __get_result
    raise self._exception
joblib.externals.loky.process_executor.BrokenProcessPool: A task has failed to un-serialize. Please ensure that the arguments of the function are all picklable.
```

https://app.circleci.com/pipelines/github/scikit-learn/scikit-learn/43516/workflows/d8bd88b5-872e-4f50-88d4-e41886117849/jobs/225593

COMMENT:
Here is a minimal reproducer that does not involve spawning new Python processes:

```python
>>> from sklearn.tree import DecisionTreeClassifier
>>> import numpy as np
>>> import joblib
>>> clf = DecisionTreeClassifier().fit(np.random.randn(100, 10), np.random.randint(0, 2, 100))
>>> joblib.dump(clf, "clf.joblib")
['clf.joblib']
>>> joblib.load("clf.joblib", mmap_mode="r")
Traceback (most recent call last):
  Cell In[7], line 1
    joblib.load("clf.joblib", mmap_mode="r")
  File ~/mambaforge/envs/dev/lib/python3.11/site-packages/joblib/numpy_pickle.py:658 in load
    obj = _unpickle(fobj, filename, mmap_mode)
  File ~/mambaforge/envs/dev/lib/python3.11/site-packages/joblib/numpy_pickle.py:577 in _unpickle
    obj = unpickler.load()
  File ~/mambaforge/envs/dev/lib/python3.11/pickle.py:1213 in load
    dispatch[key[0]](self)
  File ~/mambaforge/envs/dev/lib/python3.11/site-packages/joblib/numpy_pickle.py:402 in load_build
    Unpickler.load_build(self)
  File ~/mambaforge/envs/dev/lib/python3.11/pickle.py:1718 in load_build
    setstate(state)
  File sklearn/tree/_tree.pyx:711 in sklearn.tree._tree.Tree.__setstate__
    cdef Node[::1] node_memory_view = node_ndarray
  File stringsource:660 in View.MemoryView.memoryview_cwrapper
  File stringsource:350 in View.MemoryView.memoryview.__cinit__
ValueError: buffer source array is read-only
```

Labels: Bug, cython