feature_names returned by load_breast_cancer() is np.array, not list.

### Describe the bug

According to the online documentation(https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_breast_cancer.html), `feature_names` and `target_names` should be a list, but the value returned by the `load_breast_cancer()` function is a numpy array.
This isn't a big deal, but it can cause errors in some functions.

### Steps/Code to Reproduce

```
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import plot_tree
import matplotlib.pyplot as plt


cancer = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target)
tree = DecisionTreeClassifier(max_depth=1).fit(X_train, y_train)

plot_tree(tree, class_names=cancer.target_names,
          feature_names=cancer.feature_names)
plt.show()
```

### Expected Results

![tree](https://github.com/scikit-learn/scikit-learn/assets/18256853/33e7f1de-7619-47ad-8c5f-0d94a67974f2)


### Actual Results

```
---------------------------------------------------------------------------
InvalidParameterError                     Traceback (most recent call last)
/var/folders/gb/pxd5k4k97dnc9s5kxnt9nq2w0000gn/T/ipykernel_27513/3107534418.py in <module>
     10 tree = DecisionTreeClassifier(max_depth=1).fit(X_train, y_train)
     11 
---> 12 plot_tree(tree, class_names=cancer.target_names,
     13           feature_names=cancer.feature_names)
     14 plt.show()

~/opt/anaconda3/lib/python3.9/site-packages/sklearn/utils/_param_validation.py in wrapper(*args, **kwargs)
    199             params = {k: v for k, v in params.arguments.items() if k not in to_ignore}
    200 
--> 201             validate_parameter_constraints(
    202                 parameter_constraints, params, caller_name=func.__qualname__
    203             )

~/opt/anaconda3/lib/python3.9/site-packages/sklearn/utils/_param_validation.py in validate_parameter_constraints(parameter_constraints, params, caller_name)
     93                 )
     94 
---> 95             raise InvalidParameterError(
     96                 f"The {param_name!r} parameter of {caller_name} must be"
     97                 f" {constraints_str}. Got {param_val!r} instead."

InvalidParameterError: The 'feature_names' parameter of plot_tree must be an instance of 'list' or None. Got array(['mean radius', 'mean texture', 'mean perimeter', 'mean area',
       'mean smoothness', 'mean compactness', 'mean concavity',
       'mean concave points', 'mean symmetry', 'mean fractal dimension',
       'radius error', 'texture error', 'perimeter error', 'area error',
       'smoothness error', 'compactness error', 'concavity error',
       'concave points error', 'symmetry error',
       'fractal dimension error', 'worst radius', 'worst texture',
       'worst perimeter', 'worst area', 'worst smoothness',
       'worst compactness', 'worst concavity', 'worst concave points',
       'worst symmetry', 'worst fractal dimension'], dtype='<U23') instead.
```

### Versions

```shell
System:
    python: 3.9.13 (main, Aug 25 2022, 18:29:29)  [Clang 12.0.0 ]
executable: /Users/haesunpark/opt/anaconda3/bin/python
   machine: macOS-10.16-x86_64-i386-64bit

Python dependencies:
      sklearn: 1.3.0
          pip: 22.2.2
   setuptools: 63.4.1
        numpy: 1.21.5
        scipy: 1.9.1
       Cython: 0.29.32
       pandas: 1.4.4
   matplotlib: 3.5.2
       joblib: 1.3.2
threadpoolctl: 2.2.0

Built with OpenMP: True

threadpoolctl info:
       filepath: /Users/haesunpark/opt/anaconda3/lib/python3.9/site-packages/sklearn/.dylibs/libomp.dylib
         prefix: libomp
       user_api: openmp
   internal_api: openmp
        version: None
    num_threads: 4

       filepath: /Users/haesunpark/opt/anaconda3/lib/libmkl_rt.1.dylib
         prefix: libmkl_rt
       user_api: blas
   internal_api: mkl
        version: 2021.4-Product
    num_threads: 2
threading_layer: intel

       filepath: /Users/haesunpark/opt/anaconda3/lib/libomp.dylib
         prefix: libomp
       user_api: openmp
   internal_api: openmp
        version: None
    num_threads: 4
```

COMMENT:
I think this is fine that this is an array.
However, we should update the documentation.

On the other side, I don't see why `plot_tree` cannot accept an `array-like` (meaning a list or a NumPy array). The user experience would be better.

So there is 2 points to address here.

Labels: Bug, Needs Triage