I'm learning to use Tkinter and in the tutorials it tells me to import W from Tkinter, but W is just a str ("w").
My question is why use Tkinter.W not "w".  Is it because Tkinter will sometimes have the var equal something else dependent upon system?
This is done mostly for user convinience.
Consider the Image class from PIL/Pillow. It has a method to create a thumbnail out of an image, in the process resizing it. The method takes two arguments, the new size in a tuple and a resampling method. This can be antialias, bilinear, cubic, etc. These are internally represented with integer values, like 0, 1, etc. If you don't know which value represents which resampling method, it's cumbersome to look it and may also lead to more errors. But access it from the constant Image.BILINEAR and boom, you're done.
In your case, importing W just for the string "w" seems to be needlessly polluting the namespace and typing tkinter.W is longer than "w". This might be so. However, remember, constants in a program are defined in one place so if you ever have to change them, it will be easy to so. You never know, the module may be internally use the constant W, even if you see no point in it.
This also leads to the reason you pointed out. A constant may have a different value depending on the system or version. By using the internally consistent constant and not a static, hardcoded value, you make your life easier when you reuse that code on a diferent system or version.
Python Tkinter: Why use Tkinter.W not str "w"