Can Scriptable Objects keep data between scene load?

I’m making a game in which I’m using scriptable objects to keep data (like name and price) for an in-game shop. But I wanted to know if a scriptable object can be used to keep attributes (like life or speed) to also be able to upgrade the character (in my case a car) and store the level of upgrade to assign it when instantiating the car in the other scene. So when I star my game a script reads the level of upgrade unlocked from the files, stores it in the scriptable object (or when is bought from the shop) then when the scene for playing is loaded I want another script to read the value and then assign it to the car.
Is this possible or should I do it other way?

Read the answer on this Post: c# - Unity game manager. Script works only one time - Stack Overflow

It is an amazing post and very detailed.