Difference between tf.constant and tf.Variable (trainable= False)
Few reasons I can tell you off the top of my head:

If you declare a tf.Variable, you can change it's value later on if you want to. On the other hand, tf.constant is immutable, meaning that once you define it you can't change its value.
Let's assume that you have a neural network with multiple weight matrices, for the first few epochs you can to train the last layer, while keeping the all the rest frozen. After that, for the last few epochs, you want to fine-tune the whole model. If the first layers are defined as tf.constant, you can't do that.
I came across some code where tf.Variable(... trainable=False) was used and I wondered whether there was any difference between using tf.constant(...) and tf.Variable(with the trainable argument set to False)
It seems a bit redundant to have the trainable argument option available with tf.constant is available.