Even most IDE’s with a linter installed will flag this, it is better written as :
if settings is not None:
== and != check equivalence (do the objects contain the same ultimate value), and is checks whether two objects are the “same” as in they point to (reference) the same exact location in memory.
None is a singleton, which is one of the main reasons is is preferred.
Edit:
Just to point out if you try this, if you have two objects with the same value in the same scope, python will give them the same memory location in most instances until they no longer match, obviously.
If you put them inside other memory structures (like a list) they will return False when faced with an is check.