Okay, I think that I confused two test cases.

For `test_estimators_overwrite_params`, 'rho' was getting updated during the fit. I previously had hacked around that. Relevant lines are here:
```
(Pdb) self.get_params()['rho']
(Pdb) l  (in linear_model.coordinate_descent.py)
958  	            if this_best_mse < best_mse:
959  	                best_alpha = alphas[i_best_alpha]
960  	                best_l1_ratio = l1_ratio
961  	                best_mse = this_best_mse
962  	
963  ->	        self.l1_ratio_ = best_l1_ratio
964  	        self.alpha_ = best_alpha
965  	        self.alphas_ = np.asarray(alphas)
966  	        self.mse_path_ = np.squeeze(all_mse_paths)
967  	
968  	        # Refit the model with the parameters selected
(Pdb) s
> /home/justinvf/github/justinvf/scikit-learn/sklearn/linear_model/coordinate_descent.py(964)fit()
-> self.alpha_ = best_alpha
(Pdb) self.get_params()['rho']
0.5
```

For this SpectralClustering one though, this does not involve the fit at all. It is in `base.py:get_params`. 

```{python}
        for key in self._get_param_names():
            # catch deprecation warnings
            with warnings.catch_warnings(record=True) as w:
                value = getattr(self, key, None)
            if len(w) and w[0].category == DeprecationWarning:
                # if the parameter is deprecated, don't show it
                continue
```

In `get_params` we inspect the constructor args to find out all the arg names (via `_get_param_names`). We then call `getattr` to get the value. The `k` parameter has value `None` in the constructor, but `getattr` will trigger the property
```{python}
    @property
    @deprecated("'k' was renamed to n_clusters and will be removed in"
                " 0.15.")
    def k(self):
        return self.n_clusters
```
So this test has nothing to do with Python3. We can submit some sort of fix, but that probably belongs in another pull request.