Feature selection estimator class params does not update with pipeline class params for Gridsearch

### Describe the bug

In a pipeline which has a step of feature selection (SelectFromModel with XGB estimator) and a step of XGB class, when Grid Search is used for hyperparameter tuning of a param in XGB, only one step of the XGB param is update even another step of XGB model is cloned as shown in below code example.
How could the XGB parameter value of both steps be updated at the same time?


### Steps/Code to Reproduce

```
from xgboost import XGBClassifier                                                                                                                                        
from sklearn.base import clone
from sklearn.datasets import make_classification                                     
from sklearn.pipeline import make_pipeline                                           
from sklearn.preprocessing import StandardScaler                                     
from sklearn.feature_selection import SelectFromModel                                
from sklearn.model_selection import GridSearchCV, train_test_split                                                                                                       
                                                                                     
X, y = make_classification(n_samples=1000, n_features=10,                            
                           n_informative=2, n_redundant=0,                           
                           random_state=0, shuffle=False)                            
X_train, X_test, y_train, y_test = train_test_split(X, y)                            
                                                                                                                                                                          
param_grid = {                                                                       
    'selectfrommodel__estimator__colsample_bytree': [i/10.0 for i in range(8, 10)],  
}                                                                                    
                                                                                     
clf = XGBClassifier(max_depth=3, 
                    colsample_bytree=0.6,                                                                            
                    random_state=4,                                                  
                    n_jobs=-1)                                                       
                                                                                     
pipe = make_pipeline(StandardScaler(), SelectFromModel(clf), clone(clf))                    
                                                                                     
gs_pipe = GridSearchCV(pipe, param_grid, scoring='f1')                               
gs_pipe.fit(X_train, y_train) 
```

### Expected Results

No error is thrown.

When the XGB parameter 'colsample_bytree' value of selectfrommodel step is updated as 0.8, the XGB parameter of the last step is not update (which value is still 0.6).

How to let the XGB parameter value of both steps be updated at the same time?

### Actual Results


When the XGB parameter 'colsample_bytree' value of selectfrommodel step is updated as 0.8, the XGB parameter of the last step is not update (which value is still 0.6).

In another way:
if change as below
'''
param_grid = {                                                                       
    'classify__colsample_bytree': [i/10.0 for i in range(8, 10)],  
}    
pipe = make_pipeline(StandardScaler(), SelectFromModel(clone(clf)), clf)  
'''
During the grid search, the XGB parameter value of SelectFromModel.estimator will not be updated while only the last step of XGB parameter value is updated.


### Versions

```shell
System:
    python: 3.8.17 (default, Jun  6 2023, 17:47:46)  [Clang 14.0.3 (clang-1403.0.22.14.1)]

   machine: macOS-13.3.1-x86_64-i386-64bit

Python dependencies:
          pip: 23.1.2
   setuptools: 56.0.0
      sklearn: 1.0.2
        numpy: 1.23.5
        scipy: 1.10.1
       Cython: None
       pandas: 1.4.4
   matplotlib: 3.5.3
       joblib: 1.2.0
threadpoolctl: 3.1.0

Built with OpenMP: True
```

COMMENT:
That's what it does:

```py
from sklearn.base import clone
from sklearn.datasets import make_classification
from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler


class MyCls(LogisticRegression):
    def fit(self, X, y):
        print(self.C)
        super().fit(X, y)

X, y = make_classification(
    n_samples=1000,
    n_features=10,
    n_informative=2,
    n_redundant=0,
    random_state=0,
    shuffle=False,
)
X_train, X_test, y_train, y_test = train_test_split(X, y)

param_grid = [
    {
        "selectfrommodel__estimator__C": [i],
        "mycls__C": [i],
    }
    for i in range(8, 10)
]

clf = MyCls()

pipe = make_pipeline(StandardScaler(), SelectFromModel(clf), clone(clf))

gs_pipe = GridSearchCV(pipe, param_grid, scoring="f1", cv=2, n_jobs=1)
gs_pipe.fit(X_train, y_train)
```

output:
```
8
8
8
8
9
9
9
9
8
8
```

Labels: Bug, Needs Triage