The costs are defined per network and are the same for any operation as described in the developer guides:
The fee for a transaction is the number of operations the transaction contains multiplied by the base fee, which is 100 stroops (0.00001 XLM).
[...]
The base reserve and base fee can change, but should not do so more than once every several years. For the most part, you can think of them as fixed values.
[...]
You can look up the current fees by checking the details of the latest ledger.
Now if you take a look at a random ledger from today on testnet and mainnet, it's currently "base_fee_in_stroops": 100,
for both.
However you may pay a higher fee (set a custom base fee per transaction, for whatever reason...), but if you set your fees lower than the network default of 100 stroops your transaction will be rejected with a tx_insufficient_fee
result code.
The only way to get away without paying transaction fees is to have them payed by someone else: account A creates a transaction with a ManageData operation on behalf of account B. B does not pay fees but A does instead.